Основанная на событиях коммуникация между "родственными" взглядами - PullRequest
0 голосов
/ 06 марта 2019

Я довольно новичок в WPF, поэтому я боролся с некоторыми основными понятиями.

Мое приложение состоит из главного окна, содержащего различные вкладки. Первая вкладка используется для добавления файлов, активируя другие вкладки, которые работают с данными файлами. Для простоты назовем последние «DataTabs».

Я не уверен, как правильно общаться между вкладками. В настоящее время FileInputTab использует назначенную ICommand для выполнения следующих действий: считывание данных, создание модели представления для DataTab и создание «ViewModelReadyEvent» с использованием представления FileInputTab.

Это событие затем всплывает в MainWindow, которое активирует DataTabs и передает им созданную ViewModel.

Теперь две вещи, с которыми я борюсь.

Заполнение модели представления Является ли это лучшим подходом для заполнения модели представления для DataTabs внутри их соответствующих представлений, а не из FileInputTab, который на самом деле не имеет к этому никакого отношения? Таким образом, я мог бы правильно установить ссылку между ними, но мне пришлось бы выполнять заполнение отдельно для каждого DataTab. Есть мысли?

Связь между "родными" взглядами Неправильно позволять событию пузыриться вплоть до главного окна, чтобы оно могло управлять всей межвидовой связью. Я посмотрел на RoutingStrategies, но я не могу найти способ напрямую общаться между «родными» взглядами. Я хотел бы вызвать событие в FileInputTab и напрямую воздействовать на него в DataTabs без какого-либо промежуточного звена.

Будем благодарны за любые мысли, комментарии или рекомендации книг экспертов WPF. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Вы можете использовать IEventAggregator для связи между ViewModels.

0 голосов
/ 06 марта 2019

Используя MVVM, вы можете ввести ViewModel для каждой вкладки.Тогда вы могли бы написать Сервис для связи между ViewModels.Это довольно легко, если вы используете шаблон Messenger.Одна ViewModel отправляет сообщение в Сервис, а Сервис перенаправляет его в другую ViewModel.Служба также будет выполнять эту работу, поэтому ваша ViewModel не будет иметь никакой бизнес-логики.

MVVM Light очень вам поможет с шаблоном MVVM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...