我目前在编写 Metro 时遇到了这个问题,但我确信它适用于 WPF、Silverlight 甚至可能是 WinForms。
我有一个数据绑定文本框和一个附加到文本框的 LostFocus 事件的方法。当它失去焦点时,我希望后面的代码触发保存功能以保留数据。问题是 LostFocus 事件在通过 TwoWay 数据绑定从 GUI 更新业务对象之前触发。
处理这个问题的最佳方法是什么?有什么方法可以强制从 LostFocus 方法更新数据绑定(可能是特定于平台的)?
我目前在编写 Metro 时遇到了这个问题,但我确信它适用于 WPF、Silverlight 甚至可能是 WinForms。
我有一个数据绑定文本框和一个附加到文本框的 LostFocus 事件的方法。当它失去焦点时,我希望后面的代码触发保存功能以保留数据。问题是 LostFocus 事件在通过 TwoWay 数据绑定从 GUI 更新业务对象之前触发。
处理这个问题的最佳方法是什么?有什么方法可以强制从 LostFocus 方法更新数据绑定(可能是特定于平台的)?
听起来您想做一些业务逻辑,而不是让 GUI 更新文本框。我会将 设置Textbox
为 only BindingMode.OneWay
,以便在更改业务对象时正确更新文本框。
然后在 Lostfocus 事件中(同样是 wpf,但我想你会明白的):
private void EditBoxLostFocus( object sender, KeyboardFocusChangedEventArgs e )
{
var textbox = sender as TextBox;
//update your business object w/ textbox.Text value
//other business logic
}
这样,您就可以完全控制对象何时更新,并且可以应用您的业务规则。
在 TextBox 绑定上设置 UpdateSourceTrigger = PropertyChanged。 http://msdn.microsoft.com/en-us/library/system.windows.data.updatesourcetrigger(v=vs.100).aspx