我正在开发一个基于 BindableBase 的 ViewModel。
该虚拟机拥有域模型的一个实例。
VM公开了一个属性,比如Name,我不想使用本地存储(即VM中的存储),而是委托给模型对象的属性。
我想使用 SetProperty(),但存储引用不能是属性。
我必须自己实施 INotifyPropertyChanged 吗?
以这种方式委托给模型是个好主意吗?
是否可以扩展 BindableBase (或添加的团队)来解决这个问题?
因此,首先您必须选择如何构建虚拟机和模型。正如您提到的,有几种选择。我推荐的最简单的方法是将模型公开为属性,然后将视图绑定到模型属性:
public class MyViewModel : BindableBase
{
private Person _myPerson;
public Person Person
{
get { return _myPerson; }
set { SetProperty(ref _myPerson, value); }
}
}
如果您不想这样做,而是希望包装每个单独的模型属性,您可以这样做。
public class MyViewModel : BindableBase
{
private Person _myPerson;
private string _name;
public string Name
{
get { return _myPerson.Name; }
set { _myPerson.Name = value }
}
}
请记住,您的 Person 模型对象仍然必须实现 INPC。
编辑:如果您无法控制模型并需要它们来实现 INPC,您可以尝试使用 IL 编织,或者为模型创建外观/装饰器并单独包装它们。
public class MyPersonFacade : BindableBase
{
private Person _myPerson;
private string _name;
public string Name
{
get { return _myPerson.Name; }
set
{
_myPerson.Name = value;
OnPropertyChanged();
}
}
}
然后将其用作虚拟机中的模型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)