我有一个泛型自定义控件,它包含如下所示的属性:
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文本绑定)。
有什么想法吗?
谢了,肖恩
创建绑定时,应始终将FormattingEnabled属性设置为true
。请注意,formattingenabled=false
只是为了向后兼容,不幸的是它是默认值。
使用具有FormattingEnabled
参数的Binding
构造函数(或ControlBindingsCollection.Add
)重载之一,或在之后设置属性。在你的情况下,像这样
_customCtrl.DataBindings.Add("Editing", _controller, "CurrentItem", true);