【问题标题】:WPF (MVVM) databinding issueWPF (MVVM) 数据绑定问题
【发布时间】:2010-11-11 18:40:12
【问题描述】:

当我将子视图模型中的属性绑定到TextBox 时,无论我在绑定上设置什么模式,源都不会更新。

xaml 代码是这样的:

<TextBox Text="{Binding Path=OrderDetail.CashPaid, Mode=TwoWay}"/>

当视图加载时,绑定系统会查询一次CashPaid 属性。但无论何时编辑文本,该值都不会更新源。我必须在这里遗漏一些东西,否则 WPF 数据绑定系统不支持这种绑定。

【问题讨论】:

  • 您不清楚要编辑的内容是文本框中的文本还是 CashPaid 属性中的文本。
  • 文本框中的文字由用户编辑。

标签: wpf mvvm data-binding binding


【解决方案1】:

使用Snoop 检查您是否在 TextBox 文本属性上存在错误绑定。大多数情况下,您可以很好地了解使用它时真正发生的事情

【讨论】:

    【解决方案2】:

    您还需要确保 OrderDetail 实现的 INotifyProperty 已更改,并确保您的 CashPaid 属性在更改时得到通知。有关这方面的更多信息,请参阅 MSDN 文档。

    http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

    【讨论】:

    • 另请参阅“如何:实现 INotifyPropertyChanged 接口”:msdn.microsoft.com/en-us/library/ms229614.aspx
    • 是的,我实现了 INotifyProperty 接口并在 setter 处引发事件。对于常规绑定,例如只需绑定到当前的 datacontext/viewmodel 属性,它就可以正常工作。唯一的区别是财产所在的位置。我什至尝试将文本框上的dataContext设置为OrderDetail并正常设置文本绑定,没有任何区别。
    • 在这种情况下,尝试设置 BindsDirectlyToSource=true 并查看它是否有任何改变。另外,CashPaid 属性是字符串吗?如果不是,它不能在没有 IValueConverter 的情况下绑定 TwoWay。
    • 我认为 Jeff 可能已经注意到了:“CashPaid”听起来像是布尔值或数字。绑定将在没有转换器的情况下使用 ToString(),因此它可能看起来被正确绑定。要转换回来,您需要实现 IValueConverter 的两种方法。
    【解决方案3】:

    默认情况下,TextBox 只会在焦点离开控件时更新绑定源。如果您将UpdateSourceTrigger 设置为PropertyChanged,则该属性将随着用户键入而更新:

    <TextBox Text="{Binding Path=OrderDetail.CashPaid, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
    

    【讨论】:

    • 是的,我尝试设置 UpdateSourceTrigger=PropertyChanged,没有运气。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    相关资源
    最近更新 更多