考虑以下内容,愚蠢的例子:
// 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属性)。