WPF实战学习笔记21-自定义首页添加对话服务

自定义首页添加对话服务

定义接口与实现

添加自定义添加对话框接口

添加文件:Mytodo.Dialog.IDialogHostAware.cs

using Prism.Commands;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Mytodo.Dialog
{
    
    
    public interface IDialogHostAware
    {
    
    
        /// <summary>
        /// DialoHost名称
        /// </summary>
        string DialogHostName {
    
     get; set; }

        /// <summary>
        /// 打开过程中执行
        /// </summary>
        /// <param name="parameters"></param>
        void OnDialogOpend(IDialogParameters parameters);

        /// <summary>
        /// 确定
        /// </summary>
        DelegateCommand SaveCommand {
    
     get; set; }

        /// <summary>
        /// 取消
        /// </summary>
        DelegateCommand CancelCommand {
    
     get; set; }
    }
}

添加自定义添加对话框显示接口

注意dialogHostName应与view中dialoghost 的Identifier属性一致

using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Mytodo.Dialog
{
    public interface  IDialogHostService:IDialogService
    {
        /// <summary>
        /// 显示Dialog方法
        /// </summary>
        /// <param name="name"></param>
        /// <param name="parameters"></param>
        /// <param name="dialogHostName"></param>
        /// <returns></returns>
        Task<IDialogResult> ShowDialog(string name, IDialogParameters parameters, string dialogHostName = "Root");
    }
}

实现IDialogHostService接口

添加文件:Mytodo.Dialog.DialogHostService.cs

DialogHostService实现了自定义的IDialogHostService接口,以及DialogService类.

DialogService:可参考https://www.cnblogs.com/chonglu/p/15159387.html

Prism提供了一组对话服务, 封装了常用的对话框组件的功能, 例如:

  • RegisterDialog/IDialogService (注册对话及使用对话)
  • 打开对话框传递参数/关闭对话框返回参数
  • 回调通知对话结果
using MaterialDesignThemes.Wpf;
using Prism.Ioc;
using Prism.Mvvm;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace Mytodo.Dialog
{
    public class DialogHostService:DialogService, IDialogHostService
    {
        private readonly IContainerExtension containerExtension;

        public DialogHostService(IContainerExtension containerExtension) : base(containerExtension)
        {
            this.containerExtension = containerExtension;
        }

        public async Task<IDialogResult> ShowDialog(string name, IDialogParameters parameters, string dialogHostName = "Root")
        {
            if (parameters == null)
                parameters = new DialogParameters();

            //从容器当中去除弹出窗口的实例
            var content = containerExtension.Resolve<object>(name);

            //验证实例的有效性 
            if (!(content is FrameworkElement dialogContent))
                throw new NullReferenceException("A dialog's content must be a FrameworkElement");

            if (dialogContent is FrameworkElement view && view.DataContext is null && ViewModelLocator.GetAutoWireViewModel(view) is null)
                ViewModelLocator.SetAutoWireViewModel(view, true);

            if (!(dialogContent.DataContext is IDialogHostAware viewModel))
                throw new NullReferenceException("A dialog's ViewModel must implement the IDialogAware interface");

            viewModel.DialogHostName = dialogHostName;

            DialogOpenedEventHandler eventHandler = (sender, eventArgs) =>
            {
                if (viewModel is IDialogHostAware aware)
                {
                    aware.OnDialogOpend(parameters);
                }
                eventArgs.Session.UpdateContent(content);
            };

            return (IDialogResult)await DialogHost.Show(dialogContent, viewModel.DialogHostName, eventHandler);
        }
    }
}

添加对应的窗体

添加AddMemoView

添加文件Mytodo.Views.Dialogs.AddMemoView.xaml

<UserControl
    x:Class="Mytodo.Views.Dialogs.AddMemoView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:Mytodo.Views"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
    d:DesignHeight="450"
    d:DesignWidth="800"
    mc:Ignorable="d">
    <Grid Width="400">
        <Grid.RowDefinitions>
            <RowDefinition Height="auto" />
            <RowDefinition />
            <RowDefinition Height="auto" />
        </Grid.RowDefinitions>

        <TextBlock
            Padding="20,10"
            FontSize="20"
            FontWeight="Bold"
            Text="添加备忘录" />

        <DockPanel Grid.Row="1" LastChildFill="False">

            <TextBox
                Margin="20,0"
                md:HintAssist.Hint="请输入备忘录概要"
                DockPanel.Dock="Top"
                Text="{Binding Model.Title}" />

            <TextBox
                MinHeight="100"
                Margin="20,10"
                md:HintAssist.Hint="请输入备忘录内容"
                AcceptsReturn="True"
                DockPanel.Dock="Top"
                Text="{Binding Model.Content}"
                TextWrapping="Wrap" />
        </DockPanel>

        <StackPanel
            Grid.Row="2"
            Margin="10"
            HorizontalAlignment="Right"
            Orientation="Horizontal">
            <Button
                Margin="0,0,10,0"
                Command="{Binding CancelCommand}"
                Content="取消"
                Style="{StaticResource MaterialDesignOutlinedButton}" />
            <Button Command="{Binding SaveCommand}" Content="确定" />
        </StackPanel>
    </Grid>
</UserControl>

添加文件:Mytodo.Views.Dialogs.AddMemoViewmodel.cs

using MaterialDesignThemes.Wpf;
using Mytodo.Dialog;
using MyToDo.Share.Models;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Mytodo.ViewModels.Dialogs
{
    internal class AddMemoViewModel : BindableBase, IDialogHostAware
    {
        public AddMemoViewModel()
        {
            SaveCommand = new DelegateCommand(Save);
            CancelCommand = new DelegateCommand(Cancel);
        }

        private MemoDto model;

        public MemoDto Model
        {
            get { return model; }
            set { model = value; RaisePropertyChanged(); }
        }

        private void Cancel()
        {
            if (DialogHost.IsDialogOpen(DialogHostName))
                DialogHost.Close(DialogHostName, new DialogResult(ButtonResult.No));
        }

        private void Save()
        {
            if (string.IsNullOrWhiteSpace(Model.Title) ||
                string.IsNullOrWhiteSpace(model.Content)) return;

            if (DialogHost.IsDialogOpen(DialogHostName))
            {
                //确定时,把编辑的实体返回并且返回OK
                DialogParameters param = new DialogParameters();
                param.Add("Value", Model);
                DialogHost.Close(DialogHostName, new DialogResult(ButtonResult.OK, param));
            }
        }

        public string DialogHostName { get; set; }
        public DelegateCommand SaveCommand { get; set; }
        public DelegateCommand CancelCommand { get; set; }

        public void OnDialogOpend(IDialogParameters parameters)
        {
            if (parameters.ContainsKey("Value"))
            {
                Model = parameters.GetValue<MemoDto>("Value");
            }
            else
                Model = new MemoDto();
        }
    }
}

添加AddTodoView

添加文件Mytodo.Views.Dialogs.AddtodoView.xaml

<UserControl
    x:Class="Mytodo.Views.TodoView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:cv="clr-namespace:Mytodo.Common.Converters"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
    xmlns:local="clr-namespace:Mytodo.Views"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
    d:DesignHeight="450"
    d:DesignWidth="800"
    mc:Ignorable="d">
    <UserControl.Resources>
        <ResourceDictionary>
            <cv:IntToVisibilityConveter x:Key="IntToVisility" />
        </ResourceDictionary>
    </UserControl.Resources>
    <md:DialogHost>
        <md:DrawerHost IsRightDrawerOpen="{Binding IsRightOpen}">
            <md:DrawerHost.RightDrawerContent>
                <DockPanel
                    MinWidth="200"
                    MaxWidth="240"
                    Margin="2"
                    LastChildFill="False">
                    <TextBlock
                        Margin="10"
                        DockPanel.Dock="Top"
                        FontFamily="微软雅黑"
                        FontSize="20"
                        FontWeight="Bold"
                        Text="{Binding RightContentTitle}" />
                    <StackPanel
                        Margin="10"
                        DockPanel.Dock="Top"
                        Orientation="Horizontal">
                        <TextBlock
                            Margin="5"
                            VerticalAlignment="Center"
                            FontFamily="微软雅黑"
                            FontSize="14"
                            Text="状态" />
                        <ComboBox Margin="5" SelectedIndex="{Binding CurrDto.Status}">
                            <ComboBoxItem Content="已完成" FontSize="12" />
                            <ComboBoxItem Content="未完成" FontSize="12" />
                        </ComboBox>
                    </StackPanel>
                    <TextBox
                        Margin="10"
                        md:HintAssist.Hint="待办事项标题"
                        DockPanel.Dock="Top"
                        FontFamily="微软雅黑"
                        FontSize="12"
                        Text="{Binding CurrDto.Title}" />
                    <TextBox
                        MinHeight="50"
                        Margin="10"
                        md:HintAssist.Hint="待办事项内容"
                        DockPanel.Dock="Top"
                        FontFamily="微软雅黑"
                        FontSize="12"
                        Text="{Binding CurrDto.Content}"
                        TextWrapping="Wrap" />
                    <Button
                        Margin="10,5"
                        HorizontalAlignment="Center"
                        Command="{Binding ExecuteCommand}"
                        CommandParameter="保存"
                        Content="保存"
                        DockPanel.Dock="Top" />
                </DockPanel>
            </md:DrawerHost.RightDrawerContent>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="auto" />
                    <RowDefinition />
                </Grid.RowDefinitions>

                <StackPanel Margin="15,10" Orientation="Horizontal">
                    <TextBox
                        Width="200"
                        md:HintAssist.Hint="查找待办事项"
                        md:TextFieldAssist.HasClearButton="True"
                        FontFamily="微软雅黑"
                        FontSize="14"
                        Text="{Binding SearchString, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                        <TextBox.InputBindings>
                            <KeyBinding
                                Key="Enter"
                                Command="{Binding ExecuteCommand}"
                                CommandParameter="查询" />
                        </TextBox.InputBindings>
                    </TextBox>
                    <TextBlock
                        Margin="10"
                        FontSize="14"
                        Text="筛选" />
                    <ComboBox
                        Width="auto"
                        MinWidth="30"
                        FontFamily="微软雅黑"
                        FontSize="14"
                        SelectedIndex="{Binding SelectIndex}">
                        <ComboBoxItem Content="全部" />
                        <ComboBoxItem Content="已完成" />
                        <ComboBoxItem Content="未完成" />
                    </ComboBox>
                </StackPanel>
                <Button
                    Margin="10,0"
                    HorizontalAlignment="Right"
                    Command="{Binding ExecuteCommand}"
                    CommandParameter="添加"
                    Content="+ 添加到待办"
                    FontFamily="微软雅黑"
                    FontSize="14" />
                <StackPanel
                    Grid.Row="1"
                    VerticalAlignment="Center"
                    Visibility="{Binding TodoDtos.Count, Converter={StaticResource IntToVisility}}">
                    <md:PackIcon
                        Width="120"
                        Height="120"
                        HorizontalAlignment="Center"
                        Kind="ClipboardText" />
                    <TextBlock
                        Margin="0,10"
                        HorizontalAlignment="Center"
                        FontSize="18"
                        Text="尝试添加一些待办事项,以便在此处查看它们。" />
                </StackPanel>
                <ItemsControl
                    Grid.Row="1"
                    Margin="10"
                    ItemsSource="{Binding TodoDtos}">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <WrapPanel />
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Border MinWidth="200" Margin="10">
                                <Border.Style>
                                    <Style TargetType="Border">
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Status}" Value="0">
                                                <Setter Property="Background" Value="#1E90FF" />
                                            </DataTrigger>
                                            <DataTrigger Binding="{Binding Status}" Value="1">
                                                <Setter Property="Background" Value="#3CB371" />
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </Border.Style>
                                <Grid MinHeight="150">
                                    <!--  给项目添加行为  -->
                                    <i:Interaction.Triggers>
                                        <i:EventTrigger EventName="MouseLeftButtonUp">
                                            <i:InvokeCommandAction Command="{Binding DataContext.SelectedCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ItemsControl}}" CommandParameter="{Binding}" />
                                        </i:EventTrigger>
                                    </i:Interaction.Triggers>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="auto" />
                                        <RowDefinition />
                                    </Grid.RowDefinitions>
                                    <DockPanel Panel.ZIndex="2" LastChildFill="False">
                                        <TextBlock
                                            Margin="10,10"
                                            FontFamily="黑体"
                                            FontSize="14"
                                            Text="{Binding Title}" />
                                        <!--<md:PackIcon
                                            Margin="10,10"
                                            VerticalContentAlignment="Top"
                                            DockPanel.Dock="Right"
                                            Kind="More" />-->
                                        <md:PopupBox
                                            Margin="5"
                                            Panel.ZIndex="1"
                                            DockPanel.Dock="Right">
                                            <Button
                                                Panel.ZIndex="2"
                                                Command="{Binding DataContext.DeleteCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ItemsControl}}"
                                                CommandParameter="{Binding}"
                                                Content="删除" />
                                        </md:PopupBox>
                                    </DockPanel>
                                    <TextBlock
                                        Grid.Row="1"
                                        Margin="10,5"
                                        FontFamily="黑体"
                                        FontSize="12"
                                        Opacity="0.7"
                                        Text="{Binding Content}" />
                                    <Canvas Grid.RowSpan="2" ClipToBounds="True">
                                        <Border
                                            Canvas.Top="10"
                                            Canvas.Right="-50"
                                            Width="120"
                                            Height="120"
                                            Background="#FFFFFF"
                                            CornerRadius="100"
                                            Opacity="0.1" />
                                        <Border
                                            Canvas.Top="80"
                                            Canvas.Right="-30"
                                            Width="120"
                                            Height="120"
                                            Background="#FFFFFF"
                                            CornerRadius="100"
                                            Opacity="0.1" />
                                    </Canvas>
                                    <Border
                                        Grid.RowSpan="2"
                                        Background="#ffcccc"
                                        CornerRadius="5"
                                        Opacity="0.3" />
                                </Grid>

                            </Border>

                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </Grid>
        </md:DrawerHost>
    </md:DialogHost>
</UserControl>

添加文件:Mytodo.Views.Dialogs.AddTodoViewmodel.cs

using Mytodo.Common.Models;
using Mytodo.Service;
using Prism.Commands;
using Prism.Ioc;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using MyToDo.Share.Models;
using System.Threading.Tasks;
using Prism.Regions;
using System.Windows;

namespace Mytodo.ViewModels
{
    public class TodoViewModel: NavigationViewModel
    {
        #region 命令定义

        /// <summary>
        /// 展开侧边栏
        /// </summary>
        public DelegateCommand OpenRightContentCmd { set; get; }

        /// <summary>
        /// 打开选择的项
        /// </summary>
        public DelegateCommand<ToDoDto> SelectedCommand { get; set; }

        /// <summary>
        /// 添加、编辑 项
        /// </summary>
        public DelegateCommand<string> ExecuteCommand { get; set; }

        /// <summary>
        /// 删除项
        /// </summary>
        public DelegateCommand<ToDoDto> DeleteCommand { get; set; }

        #endregion

        #region 属性定义


        /// <summary>
        /// 项目状态
        /// </summary>
        public int SelectIndex
        {
            get { return selectIndex; }
            set { selectIndex = value; RaisePropertyChanged(); }
        }


        /// <summary>
        /// 当前选中项
        /// </summary>
        public ToDoDto? CurrDto
        {
            get { return currDto; }
            set { currDto = value; RaisePropertyChanged(); }
        }

        /// <summary>
        /// 指示侧边栏是否展开
        /// </summary>
        public bool IsRightOpen
        {
            get { return isRightOpen; }
            set { isRightOpen = value; RaisePropertyChanged(); }
        }

        /// <summary>
        /// todo集合
        /// </summary>
        public ObservableCollection<ToDoDto>? TodoDtos
        {
            get { return todoDtos; }
            set { todoDtos = value; RaisePropertyChanged(); }
        }

        /// <summary>
        /// 右侧侧边栏标题
        /// </summary>
        public string RightContentTitle
        {
            get { return rightContentTitle; }
            set { rightContentTitle = value;RaisePropertyChanged(); }
        }

        /// <summary>
        /// 要搜索的字符串
        /// </summary>
        public string SearchString
        {
            get { return search; }
            set { search = value; RaisePropertyChanged(); }
        }

        #endregion

        #region 重要字段定义

        private readonly ITodoService service;

        #endregion

        #region 字段定义
        private int selectIndex;
        private ToDoDto currDto;
        private bool isRightOpen;
        private ObservableCollection<ToDoDto>? todoDtos;
        private string rightContentTitle;
        private string search;



        #endregion

        #region 命令方法


        /// <summary>
        /// 删除指定项
        /// </summary>
        /// <param name="dto"></param>
        async private void DeleteItem(ToDoDto dto)
        {
            var delres = await service.DeleteAsync(dto.Id);

            if (delres.Status)
            {
                var model = TodoDtos.FirstOrDefault(t => t.Id.Equals(dto.Id));
                TodoDtos.Remove(dto);
            }
        }


        private void ExceuteCmd(string obj)
        {
            switch (obj)
            {
                case "添加":
                    Add(); break;
                case "查询":
                    Query();break;
                case "保存":
                    Save(); break;
            }
        }


        /// <summary>
        /// 保存消息
        /// </summary>
        private async void Save()
        {
            try
            {
                if (string.IsNullOrWhiteSpace(CurrDto.Title) || string.IsNullOrWhiteSpace(CurrDto.Content))
                    return;

                UpdateLoding(true);

                if(CurrDto.Id>0) //编辑项
                {
                    var updateres = await service.UpdateAsync(CurrDto);
                    if (updateres.Status)
                    {
                        UpdateDataAsync();
                    }
                    else
                    {
                        MessageBox.Show("更新失败");

                    }

                }
                else
                {       
                    //添加项
                    var add_res =   await service.AddAsync(CurrDto);
                    //刷新
                    if (add_res.Status) //如果添加成功
                    {
                        TodoDtos.Add(add_res.Result);
                    }
                    else
                    {
                        MessageBox.Show("添加失败");

                    }
                       
                }
            }
            catch
            {

            }
            finally
            {
                IsRightOpen = false;
                //卸载数据加载窗体
                UpdateLoding(false);
            }
        }


        /// <summary>
        /// 打开待办事项弹窗
        /// </summary>
        void Add()
        {
            CurrDto = new ToDoDto();
            IsRightOpen = true;
        }

        private void Query()
        {
            GetDataAsync();
        }



        /// <summary>
        /// 根据条件更新数据
        /// </summary>
        async void UpdateDataAsync()
        {
            int? Status = SelectIndex == 0 ? null : SelectIndex == 2 ? 1 : 0;


            var todoResult = await service.GetAllFilterAsync(new MyToDo.Share.Parameters.TodoParameter { PageIndex = 0, PageSize = 100, Search = SearchString, Status = Status });

            if (todoResult.Status)
            {
                todoDtos.Clear();
                foreach (var item in todoResult.Result.Items)
                    todoDtos.Add(item);
            }
        }



        /// <summary>
        /// 获取所有数据
        /// </summary>
        async void GetDataAsync()
        {
            //调用数据加载页面
            UpdateLoding(true);

            //更新数据
            UpdateDataAsync();

            //卸载数据加载页面
            UpdateLoding(false);
        }


        /// <summary>
        /// 弹出详细信息
        /// </summary>
        /// <param name="obj"></param>
        private async void Selected(ToDoDto obj)
        {
            var todores = await service.GetFirstOfDefaultAsync(obj.Id);
            if(todores.Status)
            {
                CurrDto = todores.Result;
                IsRightOpen = true;
                RightContentTitle = "我的待办";
            }
        }

        #endregion

        public TodoViewModel(ITodoService service,IContainerProvider provider) : base(provider)
        {
            //初始化对象
            TodoDtos = new ObservableCollection<ToDoDto>();  
            RightContentTitle = "添加血雨待办";

            //初始化命令
            SelectedCommand         = new DelegateCommand<ToDoDto>(Selected);
            OpenRightContentCmd     = new DelegateCommand(Add);
            ExecuteCommand          = new DelegateCommand<string>(ExceuteCmd);
            DeleteCommand           = new DelegateCommand<ToDoDto>(DeleteItem);

            this.service = service;
        }



        public override void OnNavigatedTo(NavigationContext navigationContext)
        {
            base.OnNavigatedTo(navigationContext);

            GetDataAsync();
        }

    }
}

修改绑定

修改文件:"Mytodo.Views.IndexView.xaml

Background="{Binding Color}"
CornerRadius="5"
Opacity="0.9">
<Border.Style>

    <Button
            Width="30"
            Height="30"
            Margin="10"
            VerticalAlignment="Top"
            Command="{Binding ExecuteCommand}"
            CommandParameter="新增待办"
            Content="{materialDesign:PackIcon Kind=Add}"
            DockPanel.Dock="Right"
            Style="{StaticResource MaterialDesignFloatingActionAccentButton}" />
    <Button
            Width="30"
            Height="30"
            Margin="10"
            VerticalAlignment="Top"
            Command="{Binding ExecuteCommand}"
            CommandParameter="新增备忘"
            Content="{materialDesign:PackIcon Kind=Add}"
            DockPanel.Dock="Right"
            Style="{StaticResource MaterialDesignFloatingActionAccentButton}" />

依赖注入

修改文件:Mytodo.App.xmal.cs

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{

    //注册服务
    containerRegistry.GetContainer().Register<HttpRestClient>(made: Parameters.Of.Type<string>(serviceKey: "webUrl"));
    containerRegistry.GetContainer().RegisterInstance(@"Http://localhost:19007/", serviceKey: "webUrl");

    containerRegistry.Register<ITodoService, TodoService>();
    containerRegistry.Register<IMemoService, MemoService>();
    containerRegistry.Register<IDialogHostService, DialogHostService>();

    //注册对话框
    containerRegistry.RegisterForNavigation<AddTodoView,AddTodoViewModel>();
    containerRegistry.RegisterForNavigation<AddMemoView,AddMemoViewModel>();


    containerRegistry.RegisterForNavigation<AboutView, AboutViewModel>();
    containerRegistry.RegisterForNavigation<SysSetView, SysSetViewModel>();
    containerRegistry.RegisterForNavigation<SkinView, SkinViewModel>();
    containerRegistry.RegisterForNavigation<IndexView, IndexViewModel>();
    containerRegistry.RegisterForNavigation<TodoView, TodoViewModel>();
    containerRegistry.RegisterForNavigation<MemoView, MemoViewModel>();
    containerRegistry.RegisterForNavigation<SettingsView, SettingsViewModel>();
}

猜你喜欢

转载自blog.csdn.net/xinzhiya001/article/details/131993996