WPF 数据绑定 MVVM

WPF data binding MVVM

我有一个模型 class Person,其中包含字符串 属性 Name。

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

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

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

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

ItemsControls 绑定到 Allpersons。

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

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

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

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

我是 MVVM 和 WPF 的新手。

提前谢谢你:)

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

So, if I have two times list of textboxes in my view. They are copies, so they are bound to same properties.

If I edit a textbox in the first list and put the cursor away from the textbox, why does it automatically change the value in the textbox in the second list.

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

这听起来很像应该发生的事情。

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