Winforms自定义控件中的通用属性上的数据绑定

时间:2016-02-02 18:46:59

标签: c# winforms generics data-binding custom-controls

我有一个包含属性的通用自定义控件,如下所示:

public T Editing
{
    get { return _editing; }
    set
    {
        if (object.ReferenceEquals(value, _editing))
            return;
        BeginInvoke(new MethodInvoker(() => UpdateOnGuiThread(value)));
    }
}

我已经尝试将此属性数据绑定到我的控制器对象上的属性,如下所示:

_customCtrl.DataBindings.Add(new Binding("Editing", _controller, "CurrentItem"));

控制器类实现了INotifyPropertyChanged并公开了如下属性:

public SpecialData CurrentItem
{
    get { return _currentItem; }
    set
    {
        _currentItem= value;
        OnPropertyChanged("CurrentItem");
    }
}

但是当我从控制器类广播PropertyChanged时,调试器永远不会进入Editing属性的setter。我也试过下面的数据绑定无济于事。

_customCtrl.DataBindings.Add(new Binding("Editing", _controller, "CurrentItem", false, DataSourceUpdateMode.OnPropertyChanged));

我已阅读https://msdn.microsoft.com/en-us/library/ms233813(v=vs.80).aspx并尝试使用DefaultBindingPropertyAttribute,但它也无济于事。

有人知道如何让这个绑定工作吗?我认为绑定管理器会将值从控制器传播到控件的属性,因为PropertyChanged在控制器类中广播(就像一个简单的文本框文本绑定)。

有什么想法吗?

谢谢, 肖恩

1 个答案:

答案 0 :(得分:0)

您应始终创建绑定,并将FormattingEnabled属性设置为true。请注意,FormattingEnabled=false仅用于向后兼容,不幸的是它是默认值。

使用具有Binding参数的ControlBindingsCollection.Add构造函数(或formattingEnabled)重载之一,或者之后设置属性。在你的情况下,像这样

_customCtrl.DataBindings.Add("Editing", _controller, "CurrentItem", true);