Prism BindableBase.SetProperty()

2024-03-09

我正在开发一个基于 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(使用前将#替换为@)

Prism BindableBase.SetProperty() 的相关文章

随机推荐