在WPF MVVM中實現簡單的視圖導航(無需外部框架)
WPF MVVM應用程序中的視圖導航允許在不同的用戶界面之間切換。本文探討了一種無需依賴MVVM Light等框架即可實現導航的簡單方法。
設置視圖模型
創建一個基視圖模型類,定義公共屬性和INotifyPropertyChanged
接口。每個具體的視圖模型(例如,MainViewModel
、PersonViewModel
、CompanyViewModel
)都應繼承自基類。
將視圖連接到視圖模型
在App.xaml
中,聲明將視圖與視圖模型關聯的數據模板。這將根據指定的視圖模型呈現相應的視圖。
在ContentControl中顯示視圖模型
在主視圖中使用綁定到ViewModel
屬性的ContentControl
來顯示不同的視圖。更改視圖模型會切換顯示的視圖。
從子視圖導航
要從子視圖導航,請在主視圖模型中創建一個命令,並將其綁定到子視圖中的按鈕。執行此命令時,該命令會更改主視圖模型中的ViewModel
屬性,從而觸發視圖切換。
代碼示例
BaseViewModel:
<code class="language-csharp">public class BaseViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; }</code>
MainViewModel:
<code class="language-csharp">public class MainViewModel : BaseViewModel { private BaseViewModel viewModel; public BaseViewModel ViewModel { get { return viewModel; } set { viewModel = value; OnPropertyChanged(nameof(ViewModel)); } } public ICommand DisplayPersonView { get; } public MainViewModel() { DisplayPersonView = new RelayCommand(() => ViewModel = new PersonViewModel()); } protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } public class RelayCommand : ICommand { private readonly Action execute; public event EventHandler CanExecuteChanged; public RelayCommand(Action execute) { this.execute = execute; } public bool CanExecute(object parameter) => true; public void Execute(object parameter) => execute(); }</code>
App.xaml (DataTemplates):
<code class="language-xml"><Application.Resources> <DataTemplate DataType="{x:Type ViewModels:MainViewModel}"> <views:MainView/> </DataTemplate> <DataTemplate DataType="{x:Type ViewModels:PersonViewModel}"> <views:PersonView/> </DataTemplate> <DataTemplate DataType="{x:Type ViewModels:CompanyViewModel}"> <views:CompanyView/> </DataTemplate> </Application.Resources></code>
示例用法:
<code class="language-xml"><ContentControl Content="{Binding ViewModel}"/></code>
請注意,此示例需要INotifyPropertyChanged
接口的實現以及一個簡單的RelayCommand
類。 OnPropertyChanged
方法和RelayCommand
類需要根據你的項目實際情況進行調整或替換。 views:
前綴代表你的視圖命名空間。 確保你的視圖和視圖模型正確地定義和關聯。
以上是如何在沒有外部框架的情況下在 WPF MVVM 中實現簡單的視圖導航?的詳細內容。更多資訊請關注PHP中文網其他相關文章!