是否可以将字段(文本框)绑定到未实现集合的属性?
例如,我有一个实现带有3个字段的INotifyPropertyChanged的对象:
public decimal SubTotal
{
get { return this.subTotal; }
set
{
this.subTotal = value;
this.NotifyPropertyChanged("SubTotal");
this.NotifyPropertyChanged("Tax");
this.NotifyPropertyChanged("Total");
}
}
public decimal Tax
{
get { return this.taxCalculator.Calculate(this.SubTotal, this.Region); }
}
public decimal Total
{
get { return this.SubTotal + this.Tax; }
}
我还没有完全测试这个,因为没有制作UI,并且在它运行之前还有很多其他的工作需要在这个类中完成,但是这可能是我拥有它的方式,还是有不同的方式是什么?
答案 0 :(得分:5)
您可以使用此类属性作为数据绑定源。当然,任何这样的数据绑定都必须是OneWay
而不是TwoWay
,因此不会尝试将TextBox.Text
的更改传播回属性(并且由于它只是readonly而失败)
[编辑] 上述内容仍适用于WinForms,但您无需关心OneWay/TwoWay
。如果它是只读的,它将永远不会尝试更新源。
答案 1 :(得分:3)
我刚试过,它运作正常。绑定引擎不会尝试更新只读属性。它不会阻止编辑控件(除非您将它们设置为只读),但编辑的值不会保留
答案 2 :(得分:1)
不,因为数据绑定在很大程度上依赖于通过反射检索的属性的设置值,所以在数据绑定方面会遇到很多麻烦,并且期望在readonly属性上设置值。
在此示例中,您将无法数据绑定到Tax
和Total
属性。