WPF如何在MVVM模式下实现导航功能
一、核心思想
1.使用一个控件作为承载所有页面的载体
①TabControl + TabItem
②Frame / NavigationWindow + Page
③ContentControl + UserControl
2.基于什么进行导航
①Navigation方法需要传入什么参数
-- Uri
-- new Page()
-- new PageVM()
-- typeof(pageVM)/
②需要通过某种方式将View与VM建立联系
③最终要展示的是View,所以如果基于View会更加简单;反之则需要借助一些手段让VM展示出相应的View
二、建立映射
1.直接在View的构造函数中实例化相应的VM
2.将Content绑定到VM实例,并添加ValueConverter,借助switch case或字典将View 与 VM逐一对应
3.所以DataTemplate实现VM与View的映射
4.在Ioc中注册,并为View注入对应的VM
5.View 与VM的类名符合命名规范,借助反射找到对应的类型,进而实例化
-- Avalonia:ViewLocator
-- Prism:ViewModelLocator
三、选择控件
1.使用TabControl
-- MW中写一个TabControl,几个TabItem并且每个都直接添加Page
-- 非常简单直观,每一个TabItem的内容本身就已经是不同的Page,可以直接在XAML中写Page,以及各自的DC
Avalonia:ViewLocator
-- 不同的Page需要与各自的VM建立关系
Prism:ViewModelLocator
2.使用Frame
①子控件为Page(UserControl亦可,只是没有NavigationService属性)
②Frame自带NavigationService,且每一个Page都能够访问到NavigationService,从而实现导航的各种功能
3.使用ContentControl
①子控件为UserControl
②可以考虑使用多个RadioButton、Button等用于导航,也可以使用ListBox等
③有点类似使用TabControl,但是可以释放VM

浙公网安备 33010602011771号