“UpdateSourceTrigger = PropertyChanged”等效于WinRT-XAML中的TextBox

时间:2012-10-02 15:00:56

标签: data-binding windows-8 winrt-xaml

在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中,使用UpdateSourceTrigger在WPF中完成了什么,在使用GetBindingExpression()的Windows Phone中完成了什么是最好的技术.UpdateSource()?

  

请注意:此问题适用于Windows 8(Metro)开发;另一个问题("UpdateSourceTrigger=PropertyChanged" equivalent for a Windows Phone 7 TextBox)适用于Windows Phone开发 - 不要混淆。

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

3 个答案:

答案 0 :(得分:5)

答案 1 :(得分:1)

在Windows 8.1中似乎可以使用UpdateSourceTriggerGetBindingExpression。感谢上面的Rico Suter和这个问题的HDW Production:

Windows Store TextBox - How to update binding on Enter key-up?

答案 2 :(得分:-2)

杰瑞,

您应该使用的模式是实现INotifyPropertyChanged。 来自MSDN的Heres和示例: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);
      }
   }
}