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"); } } }