Как реализовать шаблон MVVM в проекте WPF с использованием библиотеки GraphSharp / QuickSharp
Примечание: я новичок во всех сферах (WPF, шаблон MVVM, библиотеки GraphSharp/QuickSharp).
Я пытаюсь отобразить простой ориентированный граф с помощью библиотеки GraphSharp. Я прошел через эту демонстрацию и написал очень похожий код (создание пользовательских типов Vertex, Edge, Graph и GraphLayout и т. Д.).
Затем я добавил свойство Status в свой пользовательский тип Vertex и внедрил шаблон данных и ресурс стиля в свой код XAML (что-то похожее на демонстрацию, приведенную выше), который применял различные стили к элементам управления вершины на основе их свойства Status. Для этого мне пришлось реализовать интерфейс INotifyPropertyChanged в моем собственном типе Vertex. У меня также есть некоторые другие коды, которые изменяют свойство Status вершин во время выполнения, вызывая изменения стиля. Все это работает, пока все хорошо.
Затем я прочитал несколько статей о том, как код WPF должен быть организован в модели, модель представления и слои представления: представление (предпочтительно только код XAML) должно общаться только с классами модели представления (через привязки), последний реализует INotifyPropertyChanged и что модель представления должна говорить только с "бизнес-логикой", реализованной в модельных классах. Все это звучит хорошо, но теперь я довольно озадачен тем, что и где:
Код XAML - это представление, пока все просто.
Пользовательский тип GraphLayout, по-видимому, принадлежит слою модели представления.
Я предполагаю, что пользовательские типы вершин, ребер и графов принадлежат модельному слою. За исключением того, что теперь пользовательский тип вершины реализует INotifyPropertyChanged, который, похоже, является особенностью классов модели представления.
Код, изменяющий свойство Status пользовательской вершины, использует функциональность базовых классов QuickGraph (например, BidirectionalGraph.OutEdges()), поэтому он должен принадлежать слою модели. Но: если пользовательский граф принадлежит модели представления, то почему класс модели вызывает класс модели представления для определения всего, что связано с бизнес-логикой.
Итак, главный вопрос: какова предпочтительная структура классов для такой программы? Какие классы принадлежат модели, представлению модели и представлению слоев?