我有一个包含属性的通用自定义控件,如下所示:
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在控制器类中广播(就像一个简单的文本框文本绑定)。
有什么想法吗?
谢谢, 肖恩
答案 0 :(得分:0)
您应始终创建绑定,并将FormattingEnabled属性设置为true
。请注意,FormattingEnabled=false
仅用于向后兼容,不幸的是它是默认值。
使用具有Binding
参数的ControlBindingsCollection.Add
构造函数(或formattingEnabled
)重载之一,或者之后设置属性。在你的情况下,像这样
_customCtrl.DataBindings.Add("Editing", _controller, "CurrentItem", true);