【发布时间】:2013-05-10 18:13:39
【问题描述】:
我正在尝试解决在 WPF 中实现 MVVM 时遇到的问题。下面我的Contact 类是由实体框架填充的模型。
public class Contact : INotifyPropertyChanged
{
public string _firstName;
public string FirstName
{
get
{
return _firstName;
}
set
{
_firstName = value;
OnPropertyChanged("FirstName");
}
}
public string _lastName;
public string LastName
{
get
{
return _lastName;
}
set
{
_lastName = value;
OnPropertyChanged("LastName");
}
}
//INotifyPropertyChanged implementation omitted for brevity
}
这是我的 ViewModel:
public class ContactViewModel
{
public Contact MyContact { get; set; }
public string FullName
{
get
{
return MyContact.FirstName + " " + MyContact.LastName;
}
}
}
所以我将 View 的数据源设置为 ContactViewModel 的实例,并将两个 TextBox 绑定到 MyContact.FirstName 和 MyContact.LastName。我将TextBlock 绑定到FullName。当我更改任何一个文本框时,全名TextBlock 不会更新(显然,我没有在任何地方做OnPropertyChanged("FullName"))。
问题是,我在哪里添加OnPropertyChanged("FullName")? 我不一定要修改我的模型,因为它正在其他地方使用,我不想将它绑定到我的 ViewModel。
我需要重新考虑我的架构吗?
【问题讨论】:
-
通常是 ViewModel 实现了 INPC 接口,而不是模型。
-
如果是这样,我将如何绑定到我的模型?
-
有些人在他们的 viewModel 上复制属性。这些属性包装了模型上的属性,您的视图仅绑定到您的视图模型。两种方法都有效。
-
准确地说,viewmodel 只包含视图需要显示或操作的属性。 VM 中的属性使用模型的属性作为其支持字段。
标签: wpf mvvm inotifypropertychanged