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

このようなプロパティをデータ バインディングのソースとして使用できます。当然のことながら、そのようなデータバインディングはすべてOneWayand notTwoWayである必要があるため、 への変更がプロパティに反映されTextBox.Textないようにします (読み取り専用であるため失敗します)。

[編集]上記は WinForms にも当てはまりますが、気にする必要はありませんOneWay/TwoWay。ソースが読み取り専用の場合、ソースを更新しようとはしません。

于 2009-08-14T20:41:44.107 に答える
3

試してみましたが、うまくいきます。バインド エンジンは、読み取り専用プロパティを更新しようとしません。コントロールの編集は妨げられませんが (読み取り専用にしない限り)、編集された値は保持されません。

于 2009-08-14T21:16:20.853 に答える
1

いいえ、データバインディングはリフレクションを介して取得されたプロパティに値を設定することに大きく依存しているため、データバインディングに多くの問題が発生し、値が読み取り専用プロパティに設定されることを期待します。

Taxこの例では、およびTotalプロパティにデータバインドすることはできません。

于 2009-08-14T20:32:46.527 に答える