【问题标题】:Textbox - bound property value does not update immediately文本框 - 绑定的属性值不会立即更新
【发布时间】:2013-05-21 08:14:06
【问题描述】:

我有一个文本框,它绑定到属性ItemID,就像这样。

private string _itemID;
public string ItemID {
    get { return _itemID; }
    set { 
        _itemID = value;
    }
}

文本框的XAML如下:

<TextBox Text="{Binding Path=ItemID, Mode=TwoWay}" Name="txtItemID" />

问题是,ItemID 的值不会在我输入时立即更新,
导致 Add 按钮被禁用(命令),直到我通过按 Tab 键失去文本框的焦点。

【问题讨论】:

  • 您好 Edwin,我认为您应该实现 INotifyPropertyChanged 事件处理程序。这可能是它不更新的原因。 INotifyPropertyChanged 在您的属性中设置,并通知 UI 它已更改。此外,在您的 xaml 中,添加; UpdateSourceTrigger=PropertyChanged
  • 我同意你@gregory.bmclub
  • 我的回答对您有帮助吗?如果有,请将其标记为答案。谢谢。
  • 啊是的!我很抱歉。已标记。

标签: c# wpf mvvm


【解决方案1】:

是的,默认情况下,属性只会在失去焦点时更新。这是通过避免在每次击键时更新绑定属性来提高性能。您应该使用 UpdateSourceTrigger=PropertyChanged

试试这个:

<TextBox 
    Text="{Binding Path=ItemID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
    Name="txtItemID" />

您还应该为您的 ViewModel 实现 INotifyPropertyChanged 接口。否则,如果 ViewModel 中的属性发生更改,UI 将不会知道它。因此它不会被更新。 This 可能有助于实施。

【讨论】:

    【解决方案2】:

    您需要在 setter 中触发 OnPropertyChanged 事件,否则框架无法知道您编辑了该属性。

    这里有一些例子:

    Implementing NotifyPropertyChanged without magic strings

    Notify PropertyChanged after object update

    【讨论】:

    • 他没有遇到属性更新问题。在文本框中输入文本后,该属性会正确更新。他面临的问题是每次击键时属性都没有更新。您要回答的是与控件的属性绑定。这已经存在了。
    猜你喜欢
    • 2018-05-23
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2018-08-10
    • 2019-11-10
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    相关资源
    最近更新 更多