Prism--对话服务
实现这样一个效果,点击打开对话框,出现对话框,并且传去参数。之后会返回一些信息。
WPF也可以实现,只不过需要自己去定义事件 委托等等。Prism框架有现成的。
实现对话框:
1、在模块A视图中定义一个用户控件ViewC,用于写对话框样式。
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="温馨提示"></TextBlock>
<TextBlock Grid.Row="1" Text="大家好" FontSize="30"></TextBlock>
<StackPanel Grid.Row="2" Orientation="Horizontal">
<Button Content="确定" ></Button>
<Button Content="取消" ></Button>
</StackPanel>
</Grid>
2、在主窗口视图模型中,定义一个对话框服务
//定义一个对话框服务
private readonly IDialogService DialogService;
构造函数中实例化
public MainWindowViewModel(IRegionManager _RegionManager,IDialogService _DialogService)
{
ShowContentCmm = new DelegateCommand<string>(ShowContentFunc);
BackCmm = new DelegateCommand(Back);
RegionManager = _RegionManager;
DialogService = _DialogService;
}
定义一个打开对话框的方法
/// <summary>
/// 打开对话框
/// </summary>
private void ShowDialogFunc(string ViewName)
{
DialogService.ShowDialog(ViewName);
}
定义一个用于绑定的命令,构造函数中实例化命令。
public DelegateCommand<string> ShowDialogCmm { get; set; }
ShowDialogCmm = new DelegateCommand<string>(ShowDialogFunc);
设置按钮,绑定命令
<Button Content="打开对话框" Width="80" Height="30" Command="{Binding ShowDialogCmm}" CommandParameter="ViewC"></Button>
注入对话框服务
ModuleAProfile 中
//注入对话框
containerRegistry.RegisterDialog<ViewC>();
在模块A中新建视图C的视图模型,继承IDialogAware,并且实现接口
在主窗口视图模型中,实现打开对话框传参功能
/// <summary>
/// 打开对话框
/// </summary>
/// <param name="ucName">用户控件名称</param>
private void ShowDialogFunc(string ucName)
{
DialogParameters paras = new DialogParameters();
paras.Add("Title", "动态传递的标题");
paras.Add("para1", "业务参数值1");
paras.Add("para2", "业务参数值2");
DialogService.ShowDialog(ucName);
}
在模块A中新建视图C的视图模型,接收参数
/// <summary>
/// 打开对话框
/// </summary>
/// <param name="ucName">用户控件名称</param>
private void ShowDialogFunc(string ucName)
{
DialogParameters paras = new DialogParameters();
paras.Add("Title", "动态传递的标题");
paras.Add("para1", "业务参数值1");
paras.Add("para2", "业务参数值2");
DialogService.ShowDialog(ucName);
}