在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中文网其他相关文章!