11

在 WPF 中,只要用户通过像这样利用 UpdateSourceTrigger 对数据进行任何更改,我们就可以更新底层数据模型:

<TextBox Text="{Binding Path=TextProperty, UpdateSourceTrigger=PropertyChanged}"/>

在 Window Phone 中,UpdateSourceTrigger 未包含在 XAML 规范中,为了实现同样的目的,TextChanged 处理程序是必需的,如下所示:

(sender as TextBox).GetBindingExpression(TextBox.TextProperty).UpdateSource();

在 Windows 8 中,我假设 UpdateSourceTrigger 也会被省略——我是对的。然而,我很惊讶地发现 GetBindingExpression() 也不见了。

在 Windows 8 中,我们在 WPF 中使用 UpdateSourceTrigger 和在 Windows Phone 中使用 GetBindingExpression().UpdateSource() 完成的最佳技术是什么?

请注意:此问题适用于 Windows 8 (Metro) 开发;这另一个问题(“UpdateSourceTrigger=PropertyChanged”等效于 Windows Phone 7 TextBox)适用于 Windows Phone 开发 - 不要混淆。

作为一项研究,这个示例(我创建的)使用 TextBox 覆盖来交换导致更新的两个属性之间的文本值。正是基于。但是,有没有更好的方法?优雅的东西?

4

3 回答 3

1

它似乎UpdateSourceTrigger并且GetBindingExpression在 Windows 8.1 中可用。感谢上面的 Rico Suter 和来自这个问题的 HDW Production:

Windows Store TextBox - 如何更新 Enter 键上的绑定?

于 2014-04-29T14:16:51.880 回答
-2

杰瑞,

您应该使用的模式是实现 INotifyPropertyChanged。继承人和来自 MSDN 的示例:http: //msdn.microsoft.com/en-us/library/ms229614.aspx

这样,由于调用了 NotifyPropertyChanged() 方法,任何绑定到支持属性或字段的 XAML 对象都会在支持字段的值发生更改时收到通知。

如果您要实现此模式,则不需要显式定义何时更新 UI,所有绑定到 Notifyable 属性的 UI 元素都会像您期望的那样在源更改时更新。

对于实现 INotifyPropertyChanged 的​​类

我使用一个片段来创建我的大部分属性(如果有可能它们将被绑定或需要通知另一个对象):

private PropertyChangedEventArgs myVarChangedEventArgs = new PropertyChangedEventArgs("MyProperty");
private int myVar;
public int MyProperty
{
get { return myVar; }
set
  {
     if (myVar != value)
     {
        myVar = value;
        NotifyPropertyChanged(myVarChangedEventArgs);
      }
   }
}
于 2012-10-04T18:11:45.433 回答