2009-07-09 9 views
1

私はwpfプロジェクトでプロパティ変更イベントを実装しようとしていますが、これを行う最良の方法を探しています。WPFのデータバインディングで問題が発生しましたが、どういうことか推測する

私はこのヘッダに展開/折りたたみアイコンがあり、私のウィンドウには複数のヘッダがあるかもしれません。すべてのヘッダーが最初にリストされているにもかかわらず、ユーザーがヘッダーの一部(すべてではない)を展開したときに、ヘッダーを更新するためにウィンドウで「更新」をクリックしたときに、デフォルトを折りたたみたいそれがリフレッシュされる前だった。

ヘッダー1と2が展開され、3と4が折りたたまれている場合、リフレッシュボタンが押されたとき、実際にそれを覚えておきたいと思います。問題は、「更新」をクリックすると、全体のビューが更新されて情報が失われることです。

ヘッダーが展開または折りたたまれているときに情報を格納するためにこれらのヘッダーをホストする実際のクラスにコレクションを作成しようとしていると、展開/折りたたみが発生し、更新したいことがコレクションに通知されますコレクション内のそのような値は、リフレッシュボタンがクリックされたとき、ヘッダーがリフレッシュ前にビューに既に存在していた場合はGUIDと比較でき、展開/リフレッシュ、それはそれの状態を保持します。

答えて

1

バインドされているクラスの個々のインスタンスについては、INotifyPropertyChangedインターフェイスを実装する必要があります。

また、ヘッダーが格納されているコレクションでは、INotifyCollectionChangedインターフェイスを実装して、コレクション自体がいつ変更されるかを示します。

これらの2つのインターフェイスは、正しく実装されていれば、オブジェクト(およびそれらに含まれるコレクション)をWPFデータバインディングシステムで正しくバインドできるようにする必要があります。

+0

(INotifyCollectionChangedチェックアウト)ObservableCollection

+0

Hey casperOne、 すばやく返信いただきありがとうございます。 私はブール値プロパティが.xamlに存在しないときにも、INotifyPropertyChangedインターフェイスを使用することができると考えていますか? 拡張するために '[+]'をクリックし、アイコンが '[ - ]'に変わり、ヘッダーが展開されると、 'IsExpanded'プロパティをTRUEに設定しようとしています。私はヘッダーをホストするクラスに通知したい(どのビューにも通知しない)。 ありがとうございます! –

+0

@ダン:あなたは可能ですが、XAMLにない場合は、値にバインドできません。 これは、このプロパティを公開していないという点でデザインが少し汚れていることを意味しています(ヘッダーのデータとは別に公開する必要があります)。 – casperOne

関連する問題