2009-08-14 12 views
4

セットを実装していないプロパティにフィールド(テキストボックス)をバインドすることはできますか? UIが行われ、この中で行われるために多くの他の仕事があるされていないように私はかなりまだこれをテストすることはできませんreadonlyプロパティへのデータバインド

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; } 
} 

:例えば

私は3つのフィールドでINotifyPropertyChangedのを実装するオブジェクトを持っていますクラスが機能する前にクラスを取得することができますが、これは可能ですか、それとも別の方法がありますか?

答えて

5

データバインディングのソースなどのプロパティを使用できます。当然のことながら、このようなデータバインディングはTextBox.Textへの変更がプロパティに伝播しようとしないように(そして読み取り専用であるために)失敗するように、OneWayでなくTwoWayでなければなりません。

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

+0

これは試しましたか?コンパイラはあなたに文句を言うでしょう... –

+0

Uhm、それはしません... –

+0

私の答えは具体的にWPFの文脈であった。はい、私はそれを試しました - 私はWPFとデータバインディングを大量に使用するコードベースで作業し、私は多くのコードバインディングを自分でreadonlyプロパティに書きました。 –

1

いいえ、データバインディングは、リフレクションによって取得されたプロパティの値の設定に大きく依存しているため、データバインドに問題があり、読み取り専用プロパティーに値を設定する必要があります。

この例では、TaxTotalのプロパティにデータバインドできません。

+2

Er、なぜですか?あなたは間違いなく、ここで何をしようとしているかのように思える、データバインディングでは_source_としてreadonlyのプロパティを使うことができます。 –

3

私はちょうど試しました、それはうまく動作します。バインドエンジンは、読み取り専用のプロパティを更新しようとしません。コントロールの編集を妨げません(ただし、読み取り専用にしない限り)。編集された値は維持されません。

関連する問題