Prism wpf 小记 IDialogAware

IDialogAware 编写prism的DialogAware弹窗

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

待编写,暂时将代码贴入,待整理

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

图片大概

界面   ShowDialogView.xaml

<UserControl x:Class="ViewModule_Routine.Views.ShowDialogView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:prism="http://prismlibrary.com/"             
             prism:ViewModelLocator.AutoWireViewModel="True"
        Height="450" Width="800">
    <Grid Background="White">
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <Grid Height="100" Width="800">
            <Label Width="800" Height="100" Content="{Binding Title}" FontSize="80"/>
        </Grid>

        <Grid Height="50" Width="300" Margin="490,0,10,10" Grid.Row="1" >

            <Button Content="确定" Width="100" Margin="0,0,200,0" Command="{Binding SaveCommand}"/>
            <Button Content="取消" Width="100" Margin="200,0,0,0" Command="{Binding CacleCommand}"/>
        </Grid>
    </Grid>
</UserControl>

 

对应ViewModel    ShowDialogViewViewModel

using Prism.Commands;
using Prism.Mvvm;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Linq;

namespace ViewModule_Routine.ViewModels
{
    public class ShowDialogViewViewModel : BindableBase, IDialogAware
    {
        /// <summary>
        /// 确定按钮
        /// </summary>
        public DelegateCommand SaveCommand { set; get; }
        /// <summary>
        /// 取消按钮
        /// </summary>
        public DelegateCommand CacleCommand { set; get; }
        public string Title { get { return title; } set { title = value; RaisePropertyChanged(); } }

        public ShowDialogViewViewModel()
        {
            

            SaveCommand = new DelegateCommand(()=> 
            {
                DialogParameters keyValuePairs = new DialogParameters();
                keyValuePairs.Add("showdialog",true);
                RequestClose?.Invoke(new DialogResult(ButtonResult.OK,keyValuePairs));            
            });
            CacleCommand = new DelegateCommand(()=>
            {
                RequestClose?.Invoke(new DialogResult(ButtonResult.No));
            });

        }


        private string title;

        public event Action<IDialogResult> RequestClose;

        public bool CanCloseDialog()
        {
            return true;
        }

        public void OnDialogClosed()
        {
        }

        public void OnDialogOpened(IDialogParameters parameters)
        {
            Title = parameters.GetValue<string>("value");
        }
    }
}

  弹出,调用事件

using Prism.Commands;
using Prism.Ioc;
using Prism.Modularity;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using ViewModule_Routine.Views;

namespace ViewModule_Routine.ViewModels
{
    public class ViewAViewModel : BindableBase
    {
        private readonly IDialogService dialog;
        private readonly IRegionManager _regionManager;
        public string TextBlock_1 { get; set; }

        public DelegateCommand Jumper { private set; get; }

        public ViewAViewModel(IRegionManager regionManager,IDialogService dialogService)
        {
            _regionManager = regionManager;
            Jumper = new DelegateCommand(ExecuteCommandName);
            this.dialog = dialogService;
            //TextBlock_1 = "aaaaaaaaa";
            

        }
        void ExecuteCommandName()
        {
            DialogParameters parame = new DialogParameters();
            parame.Add("value","请输入内容");
            dialog.ShowDialog("Question",parame,arg => 
            {
                if (arg.Result == ButtonResult.OK)
                {
                    MessageBox.Show("用户点击确定");
                    _regionManager.RequestNavigate("interface", "ViewB");
                }
                else 
                {
                    MessageBox.Show("用户点击取消");

                }
            });
            //_regionManager.RequestNavigate("interface", "ViewB");
        }


    }
}

  注意

1、需要在当前IModule模块中的RegisterTypes方法中注册对应的弹窗信息。

using ViewModule_Routine.Views;
using Prism.Ioc;
using Prism.Modularity;
using Prism.Regions;

namespace ViewModule_Routine
{
    public class ViewModule_RoutineModule : IModule
    {
        private readonly IRegionManager _regionManager;

        public ViewModule_RoutineModule(IRegionManager regionManager)
        {
            _regionManager = regionManager;
        }

        /// <summary>
        /// 通知模块已被初始化。
        /// </summary>
        /// <param name="containerProvider"></param>
        public void OnInitialized(IContainerProvider containerProvider)
        {

            _regionManager.RegisterViewWithRegion("interface", typeof(ViewA));
        }
        /// <summary>
        /// 用于在我的应用程序 将使用的容器中注册类型。
        /// </summary>
        /// <param name="containerRegistry"></param>
        public void RegisterTypes(IContainerRegistry containerRegistry)
        {
            containerRegistry.RegisterForNavigation<ViewB>();
            containerRegistry.RegisterForNavigation<ViewA>();

            containerRegistry.RegisterDialog<ShowDialogView, ViewModels.ShowDialogViewViewModel>("Question");
        }
    }
}

  

 

上一篇:Prism入门之区域(Region)管理


下一篇:js中substring()和substr()的使用及区别