2017-02-22 8 views
2
  1. 私のWPF TextBoxは、datacontextとしてクラスインスタンス(SelectedDocument)を使用します。このクラスはINOtifyPropertyChangedを実装します。
  2. SelectedDocumentインスタンスは、プロパティを介して公開される "CellContent"(名前が "Description")の別のオブジェクトを所有します。
  3. CellContentはINotifyPropertyChangedも実装しています。
  4. CellContentクラスには、バインドできる文字列プロパティ( "TextValue")があります。
  5. 私はTextBoxのTextプロパティをそのTextValueプロパティにバインドします。データバインディングとWPFデータバインディング - ヒットしない中間オブジェクトのゲッター/セッター

    <TextBox DataContext="{Binding SelectedDocument}" Text="{Binding Path=Description.TextValue" /> 
    

ない問題 - それは両方の方法を動作しますので、同様に。しかし、その仕事への結合、WPFはおそらくSelectedDocumentにCellContentオブジェクトを盗んするたびにDescriptionプロパティをヒットする必要がありますのために:次に

public CellContent Description 
{ get; set; } 

(。このプロパティは、私のコードでは、より複雑である) WPFは、内部に到達することができます実際のCellContentオブジェクトとTextValueを取得/設定します。

問題: Descriptionプロパティは決してヒットしません。 WPFがそれをバイパスしているようで、Descriptionオブジェクト内のTextValueプロパティに直接接続しているようです。 私は説明のgetterとsettersを毎回打つので、そこに余分なコードを実行することができます。

どうすればよいですか?

+0

良い[mcve]がなければ、何が起きているのかについて自信がないのです。しかし、プロパティ値が実際に変更されない限り、WPFは 'Description'プロパティ値を取得しないことは当然のことです。変更されたものが 'Description.TextValue'である限り、' TextValue'プロパティだけが取得されます。それを考えると、別の質問をする必要があります。それは、あなたがこの誤ったデザインに導いた広範な目標をどのように解決するか、どのように対処するかです。 –

+0

私たちはその広い目標が何であるか分からないので、実際にあなたを助けることはできません。これまでのところ、フレームワークが期待どおりに機能しており、期待通りに機能していないことがわかります。 –

+0

基本的なデザインにはあまり魔法がありません。文字列のプロパティーが使用されていました。そのDescriptionプロパティには実行されるいくつかの余分なコードがありました(データがフィードバックされるたびに、ドキュメントはDirtyとマークされます)。各データは単なる文字列ではなく、新しいクラスにすべてカプセル化し、古いプロパティを通じてそのクラスにアクセスするのが理にかなっています。それがもうヒットしないことを除いて。 – Drakestar

答えて

2

子供の財産が変更されるたびに文書に汚れが入るようにするには、子供のPropertyChangedイベントに登録することができます。

あなたのCurrentDocumentがこのように見えると思います。

+0

感謝を述べました。私はこれを正しいとマークするつもりです...まあ、それは結局のところ、あなたがそれをやるべきなのです。 – Drakestar

0

TextValueプロパティを変更するたびに、説明のためにPropertyChangedイベントを呼び出すようにしてください。

+0

うーん、どうすればいい?すべてがデータバインドを介してXAMLから直接開始されます。 – Drakestar

+0

まあ、基本的に何NPrasは:)上記の私の愚かさをふけるため – Shadowed

関連する問題