在WPF中,每当用户对数据进行任何更改时,我们都可以像这样利用UpdateSourceTrigger来更新底层数据模型:
<TextBox Text="{Binding Path=TextProperty, UpdateSourceTrigger=PropertyChanged}"/>在Window中,XAML规范中没有包含UpdateSourceTrigger,为了实现同样的目的,需要一个TextChanged处理程序,如下所示:
(sender as TextBox).GetBindingExpression(TextBox.TextProperty).UpdateSource();在Windows 8中,我认为UpdateSourceTrigger也会被省略--我是正确的。然而,我惊讶地得知GetBindingExpression()也不见了。
在Windows 8中,我们用UpdateSourceTrigger在WPF中完成了什么,用GetBindingExpression().UpdateSource()在Windows中完成了什么?
请注意:这个问题是针对Windows8(地铁)开发的;另一个问题( "UpdateSourceTrigger=PropertyChanged“等价于Windows 7 TextBox )是针对Windows开发的--不要混淆。
作为一项研究,这个例子 (我创建的)使用TextBox覆盖在导致更新的两个属性之间交换文本值。它是基于这的。但是,还有更好的方法吗?优雅的东西?
发布于 2012-10-05 16:22:20
似乎没有GetBindingExpression或类似的解决办法。但是,您可以像这样扩展TextBox:https://mytoolkit.svn.codeplex.com/svn/WinRT/Controls/ExtendedTextBox.cs
但这并不能解决问题本身..。(真的很伤心)
另请参阅:
发布于 2014-04-29 14:16:51
UpdateSourceTrigger和GetBindingExpression似乎都可以在Windows8.1中使用。多亏了上面的Rico和这个问题的HDW产品:
发布于 2012-10-04 18:11:45
曾傑瑞,
您应该使用的模式是实现INotifyPropertyChanged。以下是MSDN:http://msdn.microsoft.com/en-us/library/ms229614.aspx的示例
这样,由于调用NotifyPropertyChanged()方法,任何绑定到支持属性或字段的XAML对象都将在备份字段的值发生更改时得到通知。
如果要实现此模式,则不需要显式定义何时更新UI,所有绑定到的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);
}
}
}https://stackoverflow.com/questions/12692885
复制相似问题