MVVM - закрытие вкладки при удалении записи - PullRequest
0 голосов
/ 27 ноября 2010

Я не совсем уверен, как сделать это наилучшим образом MVVM ...

По сути, мое основное приложение открывает окно поиска, в котором отображаются все записи в TabPanel.Затем при двойном щелчке записи открывается новая вкладка с этой записью.Сейчас я пытаюсь сохранить MVVM, но не могу понять, как закрыть табу графического интерфейса, когда человек удаляет запись (зачем держать ее открытой, если запись исчезла).

Единственный способ выяснить, как это сделать сейчас, - передать экземпляр TabItem в качестве параметра DeleteCommand, который мне кажется большим «нет-нет», но я не могу на всю жизньмне понять, как этого добиться.

Ответы [ 2 ]

3 голосов
/ 27 ноября 2010

Если вы собираетесь сделать это в истинном смысле MVVM, то двойной щелчок по записи за кулисами добавит запись в коллекцию записей. Эта коллекция записей является источником данных для вкладок в вашем элементе управления. Простое удаление этого элемента из списка (обычно ObservableCollection<T>) приведет к обновлению пользовательского интерфейса и удалению вкладки.

Какой подход вы сейчас используете для отображения вкладки?


Редактировать (в ответ на комментарий):

Это не "настоящий" MVVM. Не имеет значения, могут ли вкладки быть больше, чем просто записи. Вам следует создать модели представления, которые абстрагируют эти детали, а затем просто поместите экземпляры модели представления (RecordViewModel, ReportViewModel и т. Д.) В наблюдаемую коллекцию и свяжите ее с этим. Используйте шаблоны данных для отображения правильных представлений для содержимого каждой вкладки в зависимости от типа модели представления, к которой привязана текущая вкладка.

1 голос
/ 27 ноября 2010

Джош Смит написал потрясающую статью, описывающую, как работает MVVM.Пример приложения делает нечто очень похожее на то, что вы хотите сделать.

Приложение отображает TabControl, который отображает 1 или более рабочих пространств.Рабочая область отображает два разных типа элементов.Элементы вкладки закрыты.Посмотрите, я уверен, что это решит вашу проблему.

Приложения WPF с шаблоном проектирования Model-View-ViewModel

...