失去焦点时更新数据绑定

5

我看到WPF有一个UpdateSourceTrigger属性,可以让数据绑定在控件失去焦点后进行,WinForms有类似的功能吗?

我遇到了一个问题,当更新数据绑定的值时,整个源都会被更改,而不仅仅是单个属性。

这给我带来了问题,因为我有一个CheckBox,当它的选中状态改变时,会更新另一个具有与同一数据绑定源相同的数据绑定的源,这使得我的复选框永远不会改变值(或者说它确实改变了然后又改回去)。

我创建了一个示例程序演示了这一点。(基本表单,包括复选框和文本框)

或者,是否有另一种处理数据绑定的方法,使只有数据绑定的属性值发生更改,而不是源?


我不太明白你想要什么。数据绑定应该在控件和数据源之间进行绑定。你想在不改变数据源的情况下改变控件中的某些值吗?提供一些具体的例子会更好。 - King King
@King King,该链接提供了一个完整的示例。在示例中,第8行调用了“Text”(Text被覆盖),这最终会更改文本框的数据绑定值,从而将复选框重置为源值,因此永远不允许复选框具有不同的值。 - Sayse
@sayse,与WPF相比,WinForms的数据绑定可笑得令人发指。我认为你只有通过子类化文本框或类似的方法才能实现这一点。 - Federico Berasategui
@highcore - 我就怕出现这种情况..我在想我是否需要将复选框绑定源移动到其他地方.. - Sayse
请查看以下链接:https://dev59.com/iHVC5IYBdhLWcg3wpi98#4724828 和 https://dev59.com/wnTYa4cB1Zd3GeqPqQ86#17458095。 - Tony
1个回答

1

最终我不得不手动使用 CheckedChanged 事件更新数据绑定。

例如,使用我的示例程序的源代码。

checkBox1.CheckedChanged += (s, e) => { 
  dc.BooleanVal = ((CheckBox)s).checked;
  customControl1.Text = "3"; 
  label1.Text = dc.BooleanVal.ToString(); };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接