OneWay绑定WinForms?

时间:2010-10-23 05:13:40

标签: c# .net winforms data-binding

我有一个属性为public MyClass MyProperty{...}的控件,该值在屏幕上显示为图形。我希望此属性可以使用MyClass类绑定到程序中的任何其他BindingMyProperty将是this {{propertyName参数1}}构造函数,另一个Binding将是MyClass参数)。

dataMember实施MyClass所以在这方面一切都很好。但是如果我没有在INotifyPropertyChanged中实现get访问器并尝试绑定某些东西,我会得到一个“无法绑定到目标控件上的属性'MyProperty' 。 参数名称:PropertyName“错误。

这是否意味着我来实现MyProperty访问器,即使我知道我永远不需要读取它的值,我想要OneWay(源到目标)绑定,甚至如果我只是在get访问者中返回null

我猜测get类使用它来比较旧值或者做一些其他内部事情。我不确定,如果只返回Binding是个好主意,或者最好始终保留最后一个对象分配给null访问器的副本并将其返回set访问者。也许我真的甚至不需要写一个get访问器而我正在做其他错误的事情。只是当我注释掉get访问者并且在我放回它时停止获取错误时,我才会收到错误。

编辑:如果有任何混淆:当我说get的值在屏幕上显示为图形时,我并不是说它具有其他一些值代码读取并显示在屏幕上。没有人从MyProperty读取任何值。 MyProperty的{​​{1}}访问者是在屏幕上绘制内容的那个,这就是周期的结束。

1 个答案:

答案 0 :(得分:6)

我不是100%确定我明白你的意思,但我认为你遇到的例外来自Binding类的CheckBinding函数(反映):

if (descriptor.IsReadOnly && (this.controlUpdateMode != ControlUpdateMode.Never))
{
    throw new ArgumentException(SR.GetString("ListBindingBindPropertyReadOnly", new object[] { this.propertyName }), "PropertyName");
}

因此,将Binding的ControlUpdateMode更改为ControlUpdateMode.Never可能就是您要找的内容