【问题标题】:OneWay binding on WinForms?WinForms 上的 OneWay 绑定?
【发布时间】:2011-04-29 11:47:02
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 请重新格式化以使用段落。
  • 还有一个 OneWayToSource 绑定。很难说它是否能解决你的问题,因为我无法通读全文:) 也提供一些示例代码的短片。
  • 其实我想过段落,但不知道放在哪里。我会把它们放在附近的某个地方:)。
  • 顺便说一句,如果您没有阅读全文,您需要代码示例吗? ;)

标签: c# .net winforms data-binding


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2015-08-14
    • 2018-05-15
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多