[小菜一碟] 在 Windows Forms 中如何讓不具有資料綁定能力的控制項做資料綁定?

在 Windows Forms 當中,只要是繼承自 Control 的控制項,都有實作 IBindableComponent 這個介面,都具有資料綁定的能力,但是有一些控制項就沒有,例如:ToolStripStatusLabel,不過也不是不能做資料綁定,加給它就好了。

ToolStripStatusLabel 是 StatusStrip 的子控制項,沒有繼承自 Control 類別,自然就沒有實作 IBindableComponent 介面。

那也沒有關係,沒有的,就加給它就好了,我們新增一個 BindableToolStripStatusLabel 類別,繼承 ToolStripStatusLabel 並且實作 IBindableComponent。

[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.StatusStrip)]
public class BindableToolStripStatusLabel : ToolStripStatusLabel, IBindableComponent
{
    private ControlBindingsCollection dataBindings;
    private BindingContext bindingContext;

    public ControlBindingsCollection DataBindings => this.dataBindings ?? (this.dataBindings = new ControlBindingsCollection(this));

    public BindingContext BindingContext
    {
        get => this.bindingContext ?? (this.bindingContext = new BindingContext());
        set => this.bindingContext = value;
    }
}

其中 ToolStripItemDesignerAvailability Attribute 是讓這個 StatusStrip 的子控制項,在設計畫面中可以出現。

這樣就搞定了,使用方式就跟標準控制項一樣。

參考資料

C# 指南 ASP.NET 教學 ASP.NET MVC 指引
Azure SQL Database 教學 SQL Server 教學 Xamarin.Forms 教學