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

浙公网安备 33010602011771号