DataBinding到只读属性

时间:2009-08-14 20:29:57

标签: c# winforms data-binding properties inotifypropertychanged

是否可以将字段(文本框)绑定到未实现集合的属性?

例如,我有一个实现带有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,并且在它运行之前还有很多其他的工作需要在这个类中完成,但是这可能是我拥有它的方式,还是有不同的方式是什么?

3 个答案:

答案 0 :(得分:5)

您可以使用此类属性作为数据绑定源。当然,任何这样的数据绑定都必须是OneWay而不是TwoWay,因此不会尝试将TextBox.Text的更改传播回属性(并且由于它只是readonly而失败)

[编辑] 上述内容仍适用于WinForms,但您无需关心OneWay/TwoWay。如果它是只读的,它将永远不会尝试更新源。

答案 1 :(得分:3)

我刚试过,它运作正常。绑定引擎不会尝试更新只读属性。它不会阻止编辑控件(除非您将它们设置为只读),但编辑的值不会保留

答案 2 :(得分:1)

不,因为数据绑定在很大程度上依赖于通过反射检索的属性的设置值,所以在数据绑定方面会遇到很多麻烦,并且期望在readonly属性上设置值。

在此示例中,您将无法数据绑定到TaxTotal属性。