提问者:小点点

对自定义控件中的泛型属性进行Winforms数据绑定


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

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

我已尝试将此属性数据绑定到controller对象上的一个属性,如下所示:

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

controller类实现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在controller类中广播时,绑定管理器会将值从控制器传播到控件的属性(就像简单的textbox文本绑定)。

有什么想法吗?

谢了,肖恩


共1个答案

匿名用户

创建绑定时,应始终将FormattingEnabled属性设置为true。请注意,formattingenabled=false只是为了向后兼容,不幸的是它是默认值。

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

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