4

私は現在、グラフ(つまり、エッジを介して接続されている頂点の束)を作成し、このグラフをパターンとして使用して、他の(より大きな)グラフの束でそれを見つけることができるC#WPFアプリケーションに取り組んでいます( 「ホスト」グラフ)。各グラフ要素には、少なくともタイプとラベルがあります。

パターン グラフ要素 (辺と頂点) には、さまざまな「制限タイプ」を設定できます。

たとえば、頂点には、「この頂点のラベルは「頂点 A」でなければならない」または「この頂点のタイプはセット {タイプ A、タイプ B、タイプ H} にある必要がある」という制限を持つことができます。

エッジの場合、制限タイプは少し難しくなります。エッジは、「単純な」エッジまたは「パス」エッジのいずれかに制限できます。パターン グラフの 2 つの頂点間のパス エッジは、ホスト グラフの 2 つの頂点間の複数のエッジ (および頂点) を見つけることができるプレースホルダーと見なすことができます。対照的に、単純なエッジでは、ホスト グラフで 1 つのエッジのみを見つけることができます (追加の頂点はありません)。

エッジに (通常のエッジ制限ではなく) パス制限がある場合、最小パス長やパスで許可される頂点タイプなどの追加のプロパティがあります。

型制限構造は、次の UML クラス図で確認できます。 画像1

~~~

UI の観点から: ユーザーは、エッジにパス制限があるかどうかを構成できる必要があります。ある場合は、追加設定に必要な追加コントロール (TextBoxes、ListBoxes など) が自動的に表示されます。すべてのコントロールの変更は、データ構造に自動的に反映される必要があります。

選択したエッジの設定を変更するときのユーザー インターフェイスの動作は次のとおり 画像2 です。また、ここでは頂点とエッジのオーバーラップの設定を無視します。)

~~~

最後に、私の質問は次のように要約されます。

WPF のデータ バインディングの優雅さを維持しながら、このような動的なオブジェクト クラスの変更を実装するにはどうすればよいでしょうか。(動的なオブジェクト クラスの変更とは、[このエッジをパスと見なす] チェックボックスをクリックすることで、選択したエッジが異なる制限タイプを取得することを意味します。)

「このエッジをパスと見なす」チェックボックスの値を変更したときにトリガーされる古い学校のイベントリスナーを作成し、それを使用して他のサイドバーコントロールの可視性を「手動で」更新する必要がありますか?

なんらかの形で制限クラスの構造を変更すると、何らかの形で役立つでしょうか?

4

2 に答える 2

3

わかりました、私は実際にはデザイン パターンについて話していないので、その用語については答えていません。私は WPF を話しますが、デザイン パターンは通常、私が既に行ったものであることが判明しますが、それが何と呼ばれているかは知りませんでした。

WPF は、型が何であるかをあまり気にしません。何らかの種類DataTemplateの aを使用して表示している場合は、オブジェクトが実際に特別な処理を必要とする可能性があるすべてのタイプに対して 1 つを持つことができ、WPF がそれを処理します。特定のタイプの UI ピースを選択するためのより複雑なロジックには、ContentControlAが良い考えかもしれません。DataTemplateSelector欠点は、DataTemplateSelector選択できるようにするために、すべてのデータ型とテンプレートについて知る必要があることです。

これは実際にはサイド パネルでのみ機能しますが、実際のグラフのレンダリングはおそらくより全体的な方法で行う必要があり、まったく別の問題です。

于 2013-05-28T13:04:56.323 に答える