【问题标题】:WPF data binding MVVMWPF 数据绑定 MVVM
【发布时间】:2015-05-24 00:30:09
【问题描述】:

我有一个模型类 Person,它包含字符串属性 Name。

我有一个存储库类 Persons,它在其构造函数中创建了几个 Person 类的实例,并且它有一个返回所有 Persons 的方法。

我有一个视图模型类 PersonsViewModel,它继承自实现 INotifyPropertyChanged 的​​ ViewModelBase。

PersonsViewModel 具有 ObservableCollection 属性 AllPersons,其中包含来自 Persons 的数据。

在视图中,我有绑定到名称的文本框列表。

ItemsControls 绑定到 Allpersons。

所以,如果我的视图中有两次文本框列表。 它们是副本,因此它们绑定到相同的属性。

如果我在第一个列表中编辑一个文本框并将光标远离文本框,为什么它会自动更改第二个列表中文本框中的值。

拜托,谁能解释一下为什么会这样。

我知道在命令后编辑 ViewModels 属性时需要使用 OnPropertyChanged,但我在本示例中没有使用它们。

我是 MVVM 和 WPF 的新手。

提前谢谢你:)

【问题讨论】:

  • 请提供代码示例,仅从您的解释很难找到问题。
  • 我的代码实际上没有问题。事实上,我需要解释绑定是如何工作的,以及视图如何通知视图模型有关修改。

标签: wpf mvvm binding viewmodel observablecollection


【解决方案1】:

这听起来正是应该发生的事情。

您已将两个 ItemsControl 的 ItemsSource 绑定到同一 Person 对象集合 (AllPersons)。您已将 TextBoxes 绑定到 Person 对象的 Name 属性。当您在 TextBox 中输入字符时,您正在更改其 TextBox.Text 属性。当 UpdatePropertyChanged 事件触发时,该更改将保留在您的 ViewModel 中。 TextBox.Text 默认设置为 UpdatePropertyChanged = LostFocus,因此每当您在 TextBox 中输入字符然后单击其他位置时,UpdatePropertyChanged 事件就会触发并更新 AllPersons 集合中 Person 的 Name 属性。对此属性的更改会导致绑定到第二个 ItemsControl/TextBox 并更新其值。

【讨论】:

    【解决方案2】:

    我不知道我们是否有人理解您的问题,但是..

    所以,如果我的视图中有两次文本框列表。它们是副本,因此它们绑定到相同的属性。

    如果我在第一个列表中编辑一个文本框并将光标远离文本框,为什么它会自动更改第二个列表中文本框中的值。

    发生这种情况是因为您更改了绑定到两个不同控件的同一个对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      • 2017-08-20
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      相关资源
      最近更新 更多