4

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

例如,我有一个使用 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 还没有制作出来,在这个类中还有很多其他的工作要完成才能起作用,但这可能是我拥有它的方式,还是有不同的方式?

4

3 回答 3

5

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

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

于 2009-08-14T20:41:44.107 回答
3

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

于 2009-08-14T21:16:20.853 回答
1

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

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

于 2009-08-14T20:32:46.527 回答