如何让我的viewmodel与内部域对象保持同步?只读属性?

时间:2015-09-05 19:04:54

标签: c# .net mvvm

考虑以下内容,愚蠢的例子:

// domain class
public class Sale
{
    public decimal SubTotal { get; set; }

    public decimal TaxTotal { get; set; }

    public decimal SaleTotal => SubTotal + TaxTotal;
}


public class ViewModel : ModelBase
{
    private Sale _sale;

    public decimal SubTotal
    {
        get { return _sale.SubTotal; }
        set 
        {
            _sale.SubTotal = value;
            OnPropertyChanged();
        }
    }

    public decimal TaxTotal
    {
        get { return _sale.TaxTotal; }
        set 
        {
            _sale.TaxTotal = value;
            OnPropertyChanged();
        }
    }

    public decimal SaleTotal
    {
        ???
    }
}

我遇到的问题是SaleTotal属性是计算属性,因此没有可以触发OnPropertyChanged()方法的setter来更新UI。现在,我正在做一些kludgy逻辑,我只有原子可观察属性,当内部Sale对象更新时,我在这些属性上显式设置新值以更新显示。当我遇到与集合相同的情况(域集合也是只读的)时,这感觉很肮脏和错误,实际上并没有给我带来太多好处。

是否存在最佳(或常见)做法,以保持这两个对象同步而不破坏域类?我唯一能想到的是使用我认为最终会做同样事情的事件(即内部Sale对象已更新,因此事件处理程序只是udpates all属性)。

0 个答案:

没有答案