0

ツリー ビュー コントロールがある WPF C# アプリを開発しています。ユーザーがツリー内のノードをクリックすると、ノード固有の詳細 'フォーム' がフォーム内の別の場所にある名前付きグリッドに表示されます。ツリー内の別のノードをクリックすると、表示された詳細フォームは内容が保存されているかどうかをチェックし、閉じられ、新しい詳細フォームがその場所に表示されます。

私が必要としているのは、最初のアドバイスです。フォームをスタンドアロンの xaml として実装し、フォームを子としてスローするグリッドに「コンテナー」をいくつか配置することはできますか? または、何らかの方法でフォームをグリッドの子として追加するだけです。必要なフォームをプログラムでグリッドにロードし、それと通信するにはどうすればよいですか?

ご協力ありがとうございます。コーリー。

4

2 に答える 2

0

mvvmを使用していると想定していますか?それを読んでいない場合-それを簡単にします。

次に、ツリービューを含むフォームがあり、ビューモデルのitemsourceにバインドされています。通常、ツリービューなどのアイテムコントロールには、selecteditemプロパティがあります。これを、ツリービューに含まれるオブジェクトのタイプであるビューモデルのプロパティにバインドします。これをたとえばCurrentlySelectedItemと呼びます。

詳細'フォーム'は、コントロールまたは同じフォームで必要なものにすることができます。オブジェクトの完成度に応じて、少なくとも2つのオプションがあります。ツリービューのオブジェクトに必要なすべてのデータがすでに含まれている場合は、詳細をCurrentlySelectedItemにバインドするだけです。

明らかに、値を更新するようにバインディングシステムに指示するには、INotifyPropertyChangedを実装する必要があります。

オブジェクトに十分な情報がない場合は、CurrentlySelectedItemのセッターでメソッドを起動してオブジェクト全体をロードし、詳細をそのオブジェクト全体にバインドできます。

もう1つの一般的なアプローチであるAlternativleyは、メッセージをサブスクライブし、ツリービューオブジェクトのキーを使用してメッセージを受信すると、必要な情報をロードする自己完結型のコントロールとして詳細フォームを使用できます。

于 2012-11-30T17:25:45.190 に答える
0

イベント アグリゲーターのデザイン パターンを使用します。詳細については、こちらを参照してください。

http://martinfowler.com/eaaDev/EventAggregator.html

次に、イベント アグリゲーターを介してノードの変更クリックをリッスンし、それに応じて応答する他のコードを作成できます。これにより、コードが分離され、よりテストしやすくなります。

于 2012-11-30T17:09:51.660 に答える