首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“UpdateSourceTrigger=PropertyChanged”等价于WinRT-XAML中的TextBox

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

Stack Overflow用户
提问于 2012-10-02 15:00:55
回答 3查看 9K关注 0票数 11

在WPF中,每当用户对数据进行任何更改时,我们都可以像这样利用UpdateSourceTrigger来更新底层数据模型:

代码语言:javascript
复制
<TextBox Text="{Binding Path=TextProperty, UpdateSourceTrigger=PropertyChanged}"/>

在Window中,XAML规范中没有包含UpdateSourceTrigger,为了实现同样的目的,需要一个TextChanged处理程序,如下所示:

代码语言:javascript
复制
(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覆盖在导致更新的两个属性之间交换文本值。它是基于的。但是,还有更好的方法吗?优雅的东西?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-05 16:22:20

似乎没有GetBindingExpression或类似的解决办法。但是,您可以像这样扩展TextBox:https://mytoolkit.svn.codeplex.com/svn/WinRT/Controls/ExtendedTextBox.cs

但这并不能解决问题本身..。(真的很伤心)

另请参阅:

  • http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/a04dc907-9ca8-4302-bbad-c00b01b8193f/
  • http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/69214cce-787b-40c6-9d40-a556c5636119/
  • http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/775f1692-2837-471c-95fc-710bf0e9cc53
票数 5
EN

Stack Overflow用户

发布于 2014-04-29 14:16:51

UpdateSourceTriggerGetBindingExpression似乎都可以在Windows8.1中使用。多亏了上面的Rico和这个问题的HDW产品:

Windows -如何在输入键上更新绑定?

票数 1
EN

Stack Overflow用户

发布于 2012-10-04 18:11:45

曾傑瑞,

您应该使用的模式是实现INotifyPropertyChanged。以下是MSDN:http://msdn.microsoft.com/en-us/library/ms229614.aspx的示例

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

如果要实现此模式,则不需要显式定义何时更新UI,所有绑定到的UI功能都将如您期望的那样,在源代码更改时更新。

对于实现INotifyPropertyChanged的类

我使用一个片段来创建这样的大多数属性(如果它们有任何可能被绑定或需要通知另一个对象):

代码语言:javascript
复制
private PropertyChangedEventArgs myVarChangedEventArgs = new PropertyChangedEventArgs("MyProperty");
private int myVar;
public int MyProperty
{
get { return myVar; }
set
  {
     if (myVar != value)
     {
        myVar = value;
        NotifyPropertyChanged(myVarChangedEventArgs);
      }
   }
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12692885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档