/// <summary> /// Зерегистрировать новую пару модель-окно. Модель должна быть унаследована от базового типа ViewModel, а окно от Window /// </summary> /// <param name="viewModelType">Тип модели</param> /// <param name="windowType">Тип окна</param> public void AddPair(Type viewModelType, Type windowType) { if (!IsObjectTypeCorrespondsToExpetedType(viewModelType, typeof(ViewModel)) || !IsObjectTypeCorrespondsToExpetedType(windowType, typeof(Window))) { throw new ArgumentException("Wrong object type"); } ModelWindowDictionary.Add(viewModelType, windowType); }
/// <summary> /// Создать и отобразить окно для указанной модели /// </summary> /// <param name="viewModel">Модель окна</param> /// <param name="asDialog">Создать новое окно модально или нет</param> /// <returns>Созданное окно</returns> public virtual void ShowWindow(ViewModel viewModel, bool asDialog) { if (!ModelWindowDictionary.ContainsKey(viewModel.GetType())) { throw new ArgumentException("Not registered ViewModel type"); } var window = Activator.CreateInstance(ModelWindowDictionary[viewModel.GetType()]) as Window; ActiveWindows.Add(viewModel, window); viewModel.CloseEvent += OnViewModelCloseEvent; if (window != null) { window.DataContext = viewModel; if (asDialog) { window.ShowDialog(); } else { window.Show(); } } }