2009-04-18 21 views
1

リストボックスとフレームを含むWPFページがあります。フレームには、リストボックス内の選択によって決定されたさまざまなページがロードされます。親ページコントロールにアクセスするWPFフレーム

フレーム内の各ページにはさまざまな入力ボックスがあり、[保存キャンセル]ボタンがあります。 [保存]ボタンをクリックすると、コンテンツをデータベースに保存し、親ページのリストボックスを更新して新しいデータを反映させる必要があります。

データを保存するのは簡単ですが、親ページのリストボックスの内容をフレーム内のページから呼び出すときは、どのように更新するのですか?

これを行うには、何とか親ページのコントロールにアクセスする必要があります。

アイデア?

答えて

3

親コントロールの構造を変更した場合、親コントロールの構造を変更するとコードが破損する可能性があります。すべての含まれているページ。それは非常に緊密に結合された設計と考えられ、しばしば壊れやすいものです。

保存ボタンを押したときに、ページクラスでイベントが発生することがあります。その後、親フレームがイベントをシンクして、保存操作後にリフレッシュする必要があるものをリフレッシュできます。これは、コンポーネントがより疎結合しているためにメンテナンスが容易ですが、依然として多くのデータベース知識がGUIコンポーネントに組み込まれています。このような設計は、メンテナンスや将来の拡張を大いに期待することのない、比較的シンプルなアプリケーションに適している可能性があります。

私が好む設計パターン(多くの開発者がそうであるように)は、簡単にテストできる簡単なプログラムインタフェースを使用して、1つ以上のクラス内のデータベース処理とビジネスロジックを分離することをお勧めします。 GUIコンポーネントはできるだけシンプルで薄いので、必要に応じて簡単に変更できます。これはしばしばModel-View-Controllerパターンと呼ばれますが、それには別の名前があります。あなたの例では、ビジネスロジックをカプセル化する "コントローラ"クラスには、情報の読み取りと設定のためのプロパティとメソッド、および変更をデータベースに書き込む "保存"メソッドまたは "コミット"メソッドがあります。保存が完了すると、情報が変更され、コントローラクラスのプロパティの新しい値に基づいて更新されるという情報を表示するすべてのコントロール(ビュー)に通知する「保存済み」または「変更済み」イベントが発生します。

+0

ありがとう、ジェイ、それは面白いアプローチです。私はデータアクセスレイヤーでビジネスオブジェクトを使用しているので、そこからリフレッシュを開始することができます。私は、WPFが親コントロールにアクセスする簡単な方法を提供してくれることを期待していましたが、あまりにも楽観的すぎるかもしれません! – Mitch

関連する問題