pet*_*r p 7 c# data-binding winforms
当两个类都不是Control类型时,有没有一种简单的方法来实现数据绑定?
在我的例子中,我想将变量绑定到自定义ToolStripButton的属性.
编辑澄清:当绑定到Control时,我可以使用Control的DataBindings集合.但是,我正在寻找一种绑定属性的方法,无论源和目标类型如何.
编辑:使用winforms
我IBindableComponent
在ToolStripButton上使用了这个Implemetation,在这里找到.将BindableToolStripButton
允许您使用数据绑定像一个正常的Control
.
[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ToolStrip | ToolStripItemDesignerAvailability.StatusStrip)]
public class BindableToolStripButton : ToolStripButton, IBindableComponent
{
public BindableToolStripButton()
: base() { }
public BindableToolStripButton(String text)
: base(text) { }
public BindableToolStripButton(System.Drawing.Image image)
: base(image) { }
public BindableToolStripButton(String text, System.Drawing.Image image)
: base(text, image) { }
public BindableToolStripButton(String text, System.Drawing.Image image, EventHandler onClick)
: base(text, image, onClick) { }
public BindableToolStripButton(String text, System.Drawing.Image image, EventHandler onClick, String name)
: base(text, image, onClick, name) { }
#region IBindableComponent Members
private BindingContext bindingContext;
private ControlBindingsCollection dataBindings;
[Browsable(false)]
public BindingContext BindingContext
{
get
{
if (bindingContext == null)
{
bindingContext = new BindingContext();
}
return bindingContext;
}
set
{
bindingContext = value;
}
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ControlBindingsCollection DataBindings
{
get
{
if (dataBindings == null)
{
dataBindings = new ControlBindingsCollection(this);
}
return dataBindings;
}
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
假设您有一个类MyClass
实现INotifyPropertyChanged
,就像绑定到控件属性时一样使用它:
bindableToolStripButton1.DataBindings.Add("Enabled", myClass1, "MyBooleanProperty");
Run Code Online (Sandbox Code Playgroud)