void OnChangeViewMessage(ChangeViewMessage message) { Dispatcher.Invoke(() => { var view = (this.FindName(message.ViewName) as UserControl); #region Caching for Rooms if (message.ViewName == "RoomView") { var data = message.Data as RoomSubCategory.Time; var vm = message.ViewModel as RoomViewModel; if (data != null) { var key = data.CinemaName + data.HallID.ToString(); if (RoomViewsCache.ContainsKey(key)) { view = RoomViewsCache[key]; } else { view = new MiniRoomView(); if (vm != null) { view.DataContext = vm; (view as MiniRoomView).Init(); } RoomViewsCache.Add(key, view); RootLayout.Children.Add(view); } } } #endregion if (view == null) { return; } if (ActiveView == view) { return; } view.Visibility = Visibility.Visible; ActiveView.Visibility = Visibility.Collapsed; ActiveView = view; if (view is IView) { (view as IView).OnShow(message.Data); } ActiveView.Dispatcher.Invoke(() => { }, DispatcherPriority.Render); }); }
public void Handle(ChangeViewMessage message) { if (message.Content == null) { throw new ArgumentNullException(nameof(message), $"{nameof(message)} cannot be null"); } try { Screen screen = (Screen)message.Content; ActivateItem(screen); } catch (Exception e) { Console.WriteLine(e); } }
// ----- implementace rozhraní IHandle<ChangeViewMessage> // zatím nevyužitá metoda, ale hlavní okno je tímto připraveno přijímat požadavky z jiných view modelů na změnu pohledu public void Handle(ChangeViewMessage message) { // Když nějaká třída odešle zprávu ChangeViewMessage, tak ji zachytíme a pracujeme // ChangeViewMessage obsahuje název ViewModelu, který zaktivujeme a tím zobrazíme odpovídající pohled ActivateItem(GetViewModel(message.ViewModelName)); }