没有setter的viewmodel中的WPF mvvm属性?

mos*_*o87 4 c# wpf mvvm

我正在处理一些使用并坚持 MVVM 模式的 WPF 问题。

我的大部分属性如下所示:

public string Period
{
    get { return _primaryModel.Period; }
    set
    {
        if (_primaryModel.Period != value)
        {
            _primaryModel.Period = value;
            RaisePropertyChanged("Period");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这很好用。

但是我也有一些这样的属性:

public bool EnableConsignor
{
    get
    {
        return (ConsignorViewModel.Id != 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

它没有设置器,因为 id 会“自动”更改(每次ConsignorViewModel调用save 时。然而,这会导致“系统”不知道 bool 何时从 false 变为 true(因为没有RaisePropertyChanged叫做)。

Bra*_*NET 5

对于这些类型的属性,您只需PropertyChanged在依赖数据发生更改时引发。就像是:

public object ConsignorViewModel
{
   get { return consignorViewModel; }
   set
   {
       consignorViewModel = value;
       RaisePropertyChanged("ConsignorViewModel");
       RaisePropertyChanged("EnableConsignor");
   } 
}
Run Code Online (Sandbox Code Playgroud)

RaisePropertyChanged可以在任何方法中调用,所以只需将它放在任何会改变返回值的EnableConsignor操作之后。以上只是一个例子。

  • 而且,是的,每个人在这样做时都会感到肮脏。 (8认同)