Я пишу приложение, которое позволяет пользователям просматривать данные, и я хочу использовать стиль пользовательского интерфейса FireFox: позволить пользователю открывать столько окон, сколько они хотят, в каждом из которых есть столько вкладок, сколько они хотят. Я также хочу попытаться сделать это, используя модель Model-View-ViewModel, насколько это возможно.
Открытие новой вкладки должно быть достаточно простым для обработки в MVVM. Создайте ObservableCollection для TabViewModel, привяжите эту коллекцию к ItemsSource элемента TabControl, а затем открыть новую вкладку теоретически так же просто, как добавить новую TabViewModel в коллекцию.
Вот вопрос, который меня интересует: есть ли способ сделать то же самое для открытия нового окна ? То есть, связать ObservableCollection WindowViewModel с ItemsSource of ... коллекции Windows приложения? ... так, чтобы, когда я добавляю новую WindowViewModel в наблюдаемую коллекцию, автоматически открывается новое окно? А затем привяжите это к запуску приложения, чтобы вместо настройки StartupUri я просто добавил первый WindowViewModel в коллекцию?
Так как я не могу на самом деле привязать данные Application.Windows, что будет лучшим способом для слоя ViewModel:
- Добавить новую WindowViewModel и автоматически отобразить новое окно;
- Удалите WindowViewModel и автоматически закройте его окно.
- Удалите WindowViewModel из коллекции, если пользователь закрывает окно.
Я мог бы написать свой собственный объект, который наблюдает за INotifyCollectionChanged и открывает / закрывает окна в ответ на события сбора, но я не уверен, является ли это лучшим способом - и если это так, я не уверен в лучшем способ подключить его в приложение. У кого-нибудь есть мысли о том, как лучше это сделать?