MVVM - закрытие вкладки при удалении записи

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

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

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

2 ответа

Решение

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

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


Изменить (в ответ на комментарий):

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

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

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

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

Другие вопросы по тегам