我有一个属性为public MyClass MyProperty{...}
的控件,该值在屏幕上显示为图形。我希望此属性可以使用MyClass
类绑定到程序中的任何其他Binding
(MyProperty
将是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}}访问者是在屏幕上绘制内容的那个,这就是周期的结束。
答案 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
可能就是您要找的内容