ViewModel поверх XDocument - PullRequest
       14

ViewModel поверх XDocument

3 голосов
/ 04 ноября 2008

Я работаю над приложением WPF, у которого есть древовидное представление, представляющее XML. Я загружаю XML в XDocument, затем связываю TreeView с этим объектом.

Теперь, используя шаблон MVVM , я хочу предоставить ViewModel поверх XDocument . Каковы некоторые из вещей, которые я должен реализовать в классе ViewModel.

Я думаю о

  1. RoutedCommands, которые связываются с командами ContextMenu в TreeView, чтобы позволить добавить узел, удалить узел, изменить узел и т. Д.
  2. Логика для фактического изменения атрибутов и имен узлов в представлении.

Я иду в правильном направлении? Что еще я должен сделать, чтобы сделать его чище, модульным и в то же время простым для понимания.

Должен ли я использовать RoutedCommands или реализовать интерфейс ICommand и создавать свои команды? Как насчет использования вложенных свойств для CommandBindings? имеет ли смысл делать это в приложении TreeView, о котором я говорю? Я немного ошеломлен из-за большого количества доступных вариантов для реализации этого.

У кого-нибудь есть ссылки, пример кода, который делает подобные вещи? Ссылочная реализация может быть?

1 Ответ

1 голос
/ 15 ноября 2008

Я с тобой. Я начал с

(пользовательский интерфейс) <-> (xml)

где xml представлен как LINQy XElements, поэтому я получил уведомление PropertyChange.

Затем я добавил несколько вспомогательных классов без сохранения состояния, чтобы помочь мне разобраться с xml (раскрыть свойства, проверить данные и т. Д.). Я бы связывал XElements в ObservableCollections, чтобы я мог связываться с ними.

Прочитайте о M-V-VM и решили преобразовать мои вспомогательные классы в ViewModels. Проблемы: Вспомогательные классы живут в пространстве имен модели данных, которое ничего не знает о пользовательском интерфейсе. Вспомогательные классы знают, как преобразовать строку базы данных в XElement, ViewModel никогда не увидит этого. Вспомогательные классы имеют дело с XML. ViewModel не должен знать или заботиться.

Так что я на самом деле думаю о реализации

(пользовательский интерфейс) <-> (модель представления) <-> (помощник) <-> (xml)

но я просто воздерживаюсь от поднятия событий PropChange в помощнике только для того, чтобы вызвать их в viewmodel.

...