SampleCrossUi.Wpf 1.0.0.0
SampleCrossUi.Wpf 사용 방법을 보여 주는 예제 프로젝트입니다.
로딩중...
검색중...
일치하는것 없음
MainViewModel.cs
이 파일의 문서화 페이지로 가기
1using System.Collections.ObjectModel;
2using Dreamine.MVVM.ViewModels;
3using Dreamine.UI.Wpf.Controls.Navigation;
4using Dreamine.UI.Wpf.Controls.ViewRegion;
5using SampleCrossUi.Shared.ViewModels;
6
8
17public class MainViewModel : ViewModelBase
18{
27 private object? _currentView;
36 public object? CurrentView { get => _currentView; set => SetProperty(ref _currentView, value); }
37
46 public ObservableCollection<ButtonData> NavButtons { get; } = new();
47
56 private string? _currentPageName;
57
98 public MainViewModel(CounterViewModel counterVm, LightBulbViewModel lightBulbVm, ControlsViewModel controlsVm, PopupViewModel popupVm)
99 {
100 // 탭 이름과 전환할 ViewModel을 한 곳에 모아 데이터 기반으로 NavButtons를 생성한다.
101 var pages = new (string Content, object ViewModel)[]
102 {
103 ("Counter", counterVm),
104 ("Light Bulb", lightBulbVm),
105 ("Controls", controlsVm),
106 ("Popup", popupVm),
107 };
108
109 // ViewSwitcher.NotifyShown/NotifyHidden 데모: 탭이 전환될 때마다 해당 ViewModel이
110 // IActivatable/IVisibilityAware를 구현하면 Activate/Deactivate, OnShown/OnHidden이 호출된다.
111 foreach (var page in pages)
112 ViewSwitcher.RegisterViewModel(page.Content, page.ViewModel);
113
114 for (int i = 0; i < pages.Length; i++)
115 {
116 var index = i;
117 var name = pages[i].Content;
118 var vm = pages[i].ViewModel;
119
120 // VsNavigationHelper.Create는 Dreamine.UI.Wpf.Controls.Navigation에서 제공하는
121 // 표준 ButtonData 팩토리로, 직접 ButtonData를 new해서 스타일을 반복 지정하지 않아도 된다.
122 NavButtons.Add(VsNavigationHelper.Create(
123 name,
124 new RelayCommand(() => SwitchTo(name, vm, index)),
125 isSelected: index == 0));
126 }
127
128 SwitchTo(pages[0].Content, pages[0].ViewModel, 0);
129 }
130
163 private void SwitchTo(string name, object vm, int index)
164 {
165 if (_currentPageName != null)
166 ViewSwitcher.NotifyHidden(_currentPageName);
167
168 CurrentView = vm;
169 SelectNav(index);
170 ViewSwitcher.NotifyShown(name);
171 _currentPageName = name;
172 }
173
190 private void SelectNav(int index)
191 {
192 for (int i = 0; i < NavButtons.Count; i++)
193 NavButtons[i].IsSelected = i == index;
194 }
195}
void SwitchTo(string name, object vm, int index)
MainViewModel(CounterViewModel counterVm, LightBulbViewModel lightBulbVm, ControlsViewModel controlsVm, PopupViewModel popupVm)
ObservableCollection< ButtonData > NavButtons