【发布时间】:2014-07-04 12:40:45
【问题描述】:
我需要将属性绑定到 ToolStripMenuItem。我四处搜索,发现不可能,最好的解决方法似乎是创建一个 BindableToolStripMenuItem 类并自己实现它。所以我从互联网上获取了一些相当完善的代码:
public class BindableToolStripMenuItem : ToolStripMenuItem,IBindableComponent
{
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;
}
}
}
现在我只需要绑定它吗?我使用 toolStripMenu 设置了一个表单,并添加了一个要绑定的属性:没有运气。我可以检查一下,但更改似乎没有过滤到绑定中。
public partial class Form1 : Form
{
private Boolean _BindingChecked;
public Boolean BindingChecked {
get { return _BindingChecked; }
set { _BindingChecked = value; Console.WriteLine(": " + _BindingChecked); }
}
public Form1()
{
InitializeComponent();
BindableToolStripMenuItem btsmi = new BindableToolStripMenuItem();
btsmi.Text = "Checkable";
btsmi.CheckOnClick = true;
btsmi.DataBindings.Add(new Binding("Checked",this,"BindingChecked"));
itemsToolStripMenuItem.DropDownItems.Add(btsmi);
}
}
它肯定会做一些绑定!如果我更改“Binding Checked”或“Checked”字符串,它会引发相应的错误,例如:
An unhandled exception of type 'System.ArgumentException' occurred in System.Windows.Forms.dll
Additional information: Cannot bind to the property or column BindingChecked2 on the DataSource.
只是任何更改(对于任何一个,我都测试了它以另一种方式实现 InotifyChanged)不会应用于绑定属性。
知道我哪里出错了吗?我已经减少了很多东西,只有这两个类,我尝试从头开始使用 BdindableToolStripMenuItem,并查看了一些其他人的实现(几乎都是相同的),但仍然无法实现工作。
谢谢
【问题讨论】:
标签: c# .net winforms data-binding