首页 > 其他分享 >5.Prism对话框IDialogAware

5.Prism对话框IDialogAware

时间:2024-02-07 09:45:12浏览次数:31  
标签:parameters 对话框 void IDialogAware Prism new public

案例:

项目添加Prism框架引用。

1.添加对话框项目,添加一个用户控件ConfigView.xaml

<UserControl x:Class="ConfigModule.Views.ConfigView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
             xmlns:local="clr-namespace:ConfigModule.Views"
             xmlns:prism="http://prismlibrary.com/"
             mc:Ignorable="d" 
             Width="430" Height="500">


    <Grid>
        
        <DockPanel HorizontalAlignment="Right" Grid.Row="1" Margin="0,5">
            <Button Content="{DynamicResource 确定}" Command="{Binding OKCommand}" Width="80" Height="30" Margin="5" FontSize="14"/>
            <Button Content="{DynamicResource 取消}" IsCancel="True" Width="80" Height="30" Margin="5" FontSize="14"/>
        </DockPanel>
    </Grid>

</UserControl>

2.添加一个Base基类,需要继承IDialogAware接口实现里面的方法(或vm中直接接触BindableBase, IDialogAware)。OnDialogOpened方法可以获取传过来的参数

 public class DialogViewModelBase : BindableBase, IDialogAware
    {
        public string Title { get; set; } = "对话框标题";

        public event Action<IDialogResult> RequestClose;

        /// <summary>
        /// 关闭对话框前,判断是否可以关闭
        /// </summary>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public virtual bool CanCloseDialog()
        {
            return true;
        }

        /// <summary>
        /// 关闭时执行的方法
        /// </summary>
        public virtual void OnDialogClosed()
        {

        }

        /// <summary>
        /// 打开时执行的方法
        /// </summary>
        /// <param name="parameters"></param>
        /// <exception cref="NotImplementedException"></exception>
        public virtual void OnDialogOpened(IDialogParameters parameters)
        {

        }


        /// <summary>
        /// 关闭对话框
        /// </summary>
        /// <param name="buttonResult"></param>
        /// <param name="dialogParameters"></param>
        protected virtual void CloseDialog(ButtonResult buttonResult, IDialogParameters dialogParameters = null)
        {
            RequestClose?.Invoke(new DialogResult(buttonResult, dialogParameters));
        }

    }

 

3.添加ConfigViewModel类并继承DialogViewModelBase基类 。CloseDialog方法有两个参数,第一个是状态,第二个是参数,把参数传到父窗体中。

public  class ConfigViewModel: DialogViewModelBase
    {
        public DelegateCommand OKCommand { get; }
        public ConfigViewModel(SystemConfigManager systemConfigManager, SystemConfigProvider systemConfigProvider)
        {
            OKCommand = new DelegateCommand(Submit);
        }

        private void Submit()
        {
            CloseDialog(Prism.Services.Dialogs.ButtonResult.OK);
        }


    }

 

使用:v

 <MenuItem Header="系统设置" Command="{Binding SystemConfigCommand}"/>

vm

public class MenuViewModel: BindableBase
    {
        public DelegateCommand SystemConfigCommand { get;private set; }

        public MenuViewModel()
        {
            SystemConfigCommand = new DelegateCommand(SystemConfigAction);
        }

        private void SystemConfigAction()
        {
            DialogParameters parameters =new DialogParameters();
            parameters.Add("ConfigViewKey", $"ConfigViewKey页面,现在时间{DateTime.Now.ToString("yyyy-MM-dd")}");
            //弹窗并传入参数
            PrismProvider.DialogService.ShowDialog(ViewNames.ConfigView, parameters, Callback);
        }


        private void Callback(IDialogResult result)
        {
            //todo...获取参数
 var p= result.Parameters.GetValue<string>("key"); } }

 

标签:parameters,对话框,void,IDialogAware,Prism,new,public
From: https://www.cnblogs.com/MingQiu/p/18010624

相关文章

  • 2.Prism框架ModuleAttribute、IOC扩展、功能注册
    ModuleAttribute(按需延迟加载)ModuleAttribute是Prism框架中用于标识模块的属性。通过使用ModuleAttribute,可以将模块与特定的模块目录进行关联,从而使Prism应用程序能够动态加载和初始化模块。在使用WPFModuleAttribute时,需要将该属性应用于模块类,并指定模块的模块目......
  • 1.Prism框架介绍
    什么是Prism:1.WPFPrism是一个用于构建模块化、可扩展和可重用的WPF应用程序的框架。它基于MVVM模式,提供了一种简单且灵活的方式来管理复杂的WPF应用程序。2.Prism框架提供了一些核心概念,包括模块化开发、依赖注入、命令模式、导航和事件聚合等。它还提供了一些实用工具和类来简......
  • WPF Prism,mvvm模式下,DataGrid中一列CheckBox的勾选的绑定
    背景WPF+Prism,View和ViewModel,通过Binding来实现数据的更新和界面的刷新,我的需求是做一个表格,第一列为CheckBox,同时这一列的header也是CheckBox,勾选了header的CheckBox,可以实现所有行的CheckBox全选的功能界面如下:实现方法xaml代码:<DataGridx:Name="dgRoundRobin"......
  • Prism:打造WPF项目的MVVM之选,简化开发流程、提高可维护性
     概述:探索WPF开发新境界,借助PrismMVVM库,实现模块化、可维护的项目。强大的命令系统、松耦合通信、内置导航,让您的开发更高效、更流畅在WPF开发中,一个优秀的MVVM库是Prism。以下是Prism的优点以及基本应用示例:优点:模块化设计: Prism支持模块化开发,使项目更易维护和扩展。......
  • Xamarin.Android中使用TaskCompletionSource创建阻塞式的对话框
    代码如下usingAndroid.OS;usingAndroid.Views;usingAndroid.Util;usingActivity=Android.App.Activity;namespaceKangHuiXinCai_FangDai_AndroidScanner{publicclassDialog_SettingPassword:Dialog{TaskCompletionSource<DialogResu......
  • MFC对话框处理Esc和Enter键,避免对话框关闭
    要在MFC对话框中处理ESC和ENTER消息,避免对话框退出,您可以重写对话框类的PreTranslateMessage函数,并在该函数中处理这些消息。首先,打开对话框类的头文件(.h文件),添加以下声明:afx_msgBOOLPreTranslateMessage(MSG*pMsg);然后在.cpp文件中,实现PreTranslateMessage函数:......
  • MFC 模态对话框
    Frame消息:BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)ON_WM_CREATE()ON_COMMAND(ID_DIALOG_EXEC,&CMainFrame::OnDialogExec)ON_COMMAND(ID_DIALOG_SHOW,&CMainFrame::OnDialogShow)ON_COMMAND(ID_DIALOG_32773,&CMainFrame::OnDialog3277......
  • 毕设4:导出文件对话框
    一般弹出窗口会用Dialog,但JavaFX的Dialog很难自定义,不如直接弹出一个Stage。分割文件、导出图片和文字三个功能共用一个对话框。于是新增了一个enum区别三个功能。enum可以加方法,还挺好玩的:packagecom.pdfTool.defination;publicenumExportType{SPLIT{@Ove......
  • Prism框架
    1.搭建(1)通过NuGet安装程序包Prism.DryIoc。(2)在App.xaml中引用Prism命名空间,项目应用对象改为PrismApplication,并且删除StartupUri。<prism:PrismApplicationx:Class="WpfApp1.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"......
  • 在loongxin系统lazarus IDE打开文件对话框出现死机的处理方案
    在loongxin系统使用lazarusIDE打开或保存project等文件出现对话框出现卡死的问题。 原因:loongnixmate桌面有问题和lazarus不兼容,cartoon桌面没这个问题。解决方法:将gtk2-murrine-engine卸载,卸载后lazarus抵足保存或打开文件的对话框已恢复正常,系统主题恢复为原始状态。如果你......