C# 在Prism、MVVM中分离业务模型和视图模型
我正在看WPF棱镜的例子。在Brian repo中,他在简单的MVVM WPF应用程序上找到了这个简单的示例: 现在我想把firstName、lastName和lastUpdated属性放在单独的类中,它的“业务模型”称为Person。我写了这样的东西,我想知道它是否正确 在ViewAViewModel中,我使用prism代码段设置了property person:C# 在Prism、MVVM中分离业务模型和视图模型,c#,wpf,prism,C#,Wpf,Prism,我正在看WPF棱镜的例子。在Brian repo中,他在简单的MVVM WPF应用程序上找到了这个简单的示例: 现在我想把firstName、lastName和lastUpdated属性放在单独的类中,它的“业务模型”称为Person。我写了这样的东西,我想知道它是否正确 在ViewAViewModel中,我使用prism代码段设置了property person: private Person person; public Person Person { get { return p
private Person person;
public Person Person
{
get { return person; }
set { SetProperty(ref person, value); }
}
我的Person类如下所示:
public class Person:BindableBase
{
private string firstName = "Karol";
public string FirstName
{
get { return firstName; }
set
{
SetProperty(ref firstName, value);
}
}
}
private Person _person;
public Person Person
{
get { return _person; }
set
{
if (_person != null)
_person.PropertyChanged -= Person.PropetryChanged;
SetProperty(ref _person, value);
if (_person != null)
_person.PropertyChanged -= Person.PropetryChanged;
}
}
现在,这是一种正确的方法吗。我在某个地方读到,在person类中,我更应该使用标准的OnPropertyChanged()方法。你觉得怎么样
编辑:
我记得我在想什么。我看过Brian Langunas关于Prism的网络研讨会,他说ViewModel中的人物道具应该这样做:
public class Person:BindableBase
{
private string firstName = "Karol";
public string FirstName
{
get { return firstName; }
set
{
SetProperty(ref firstName, value);
}
}
}
private Person _person;
public Person Person
{
get { return _person; }
set
{
if (_person != null)
_person.PropertyChanged -= Person.PropetryChanged;
SetProperty(ref _person, value);
if (_person != null)
_person.PropertyChanged -= Person.PropetryChanged;
}
}
他说,这与内存管理有关。可以在ViewMode llifetime中多次设置property Person,您必须首先检查是否有以前的实例并取消订阅。如果不这样做,则可能会出现内存泄漏。但这是很久以前的事了(2015年),也许它是固定的。这是链接(1:04:20):你能指一下吗?问候除了依赖于
Prism
和BindableBase
类之外,您的方法没有任何错误
如果Person
是“更大”域的一部分,也可能用于您的服务和/或业务层,您可能不希望这样做
然后,您最好使它成为一个普通的旧CLR(POCO)对象,它不依赖于任何第三方UI框架。当然,它仍然可以实现内置的INotifyPropertyChanged
接口