gpt4 book ai didi

c# - WinForms 上的单向绑定(bind)?

转载 作者:太空狗 更新时间:2023-10-29 23:11:07 25 4
gpt4 key购买 nike

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

MyClass 实现了 INotifyPropertyChanged,所以在这方面一切正常。但是碰巧如果我不在 MyProperty 中实现 get 访问器并尝试将某些东西绑定(bind)到它,我会得到一个 "Cannot bind to the property '目标控件上的 MyProperty'。参数名称:PropertyName” 错误。

这是否意味着我必须实现一个get访问器,即使我知道我永远不需要读取它的值并且我想要一个单向(源到目标)绑定(bind),即使我只是在 get 访问器中返回 null

我猜 Binding 类使用它来将新值与旧值进行比较或执行其他一些内部操作。那么,我不确定只返回 null 是否是个好主意,或者最好始终保留使用 set 分配的任何最后一个对象的副本> 访问器并在 get 访问器中返回它。也许我真的不需要编写 get 访问器,而我做错了其他事情。碰巧只有当我注释掉 get 访问器并在我放回去时停止获取它时才会收到错误。

编辑:如果有任何混淆:当我说 MyProperty 的值在屏幕上显示为图表时,我并不是说它有值一些其他代码读取并显示在屏幕上。没有人从 MyProperty 中读取任何值。 MyPropertyset 访问器是在屏幕上绘制内容的访问器,它是循环的结尾。

最佳答案

我不是 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 可能就是您要找的

关于c# - WinForms 上的单向绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4002591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com