注: 私は関連するすべての分野 (WPF、MVVM パターン、GraphSharp/QuickSharp ライブラリ) の初心者です。
GraphSharp ライブラリを使用して単純な有向グラフを表示しようとしています。私はこのデモを見て、非常によく似たコードをいくつか書きました (カスタム Vertex、Edge、Graph、GraphLayout タイプの作成など)。
次に、カスタム Vertex タイプに Status プロパティを追加し、データ テンプレートとスタイル リソースを XAML コードに実装しました (上記のリンクのデモと多少似ています)。これにより、Status プロパティに基づいて頂点コントロールにさまざまなスタイルが適用されます。このために、カスタム Vertex タイプに INotifyPropertyChanged インターフェイスを実装する必要がありました。実行時に頂点の Status プロパティを変更し、スタイルの変更をトリガーするコードもいくつかあります。これまでのところ、これはすべて機能しています。
次に、WPF コードをモデル、ビュー モデル、およびビュー レイヤーに編成する方法についての記事をいくつか読みました。ビュー (できれば XAML コードのみ) は、ビュー モデル クラスとのみ (バインディングを介して) 対話する必要があり、後者は INotifyPropertyChanged を実装し、ビュー モデルは、モデル クラスに実装された「ビジネス ロジック」とのみ通信する必要があります。これはすべて良さそうに聞こえますが、今では何がどこに属しているのかについてかなり混乱しています:
XAML コードはビューであり、ここまでは単純です。
カスタム GraphLayout タイプは、ビュー モデル レイヤーに属しているようです。
カスタム頂点、エッジ、およびグラフ タイプはモデル レイヤーに属していると思います。カスタム頂点型が INotifyPropertyChanged を実装するようになったことを除いて、これはビュー モデル クラスの特徴のようです。
カスタム頂点の Status プロパティを変更するコードは、QuickGraph 基本クラスの機能 (BidirectionalGraph.OutEdges() など) を利用するため、モデル レイヤーに属している必要があります。ただし、カスタム グラフがビュー モデルに属している場合、ビジネス ロジックに関連するものを決定するために、モデル クラスがビュー モデル クラスを呼び出すのはなぜですか。
したがって、主な質問は次のとおりです。このようなプログラムに適したクラス構造は何ですか? モデル、ビュー モデル、ビュー レイヤーに属するクラスはどれですか?