在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。但是,有更好的方法吗?优雅的东西?
答案 0 :(得分:5)
似乎没有GetBindingExpression
或等效的解决方法。但是,您可以像这样扩展TextBox:https://mytoolkit.svn.codeplex.com/svn/WinRT/Controls/ExtendedTextBox.cs
这仍然没有解决问题......(真的很难过)
另见:
答案 1 :(得分:1)
在Windows 8.1中似乎可以使用UpdateSourceTrigger
和GetBindingExpression
。感谢上面的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);
}
}
}