IDialogAware 对话框
<Grid Background="White"> <Grid.RowDefinitions> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> </Grid.RowDefinitions> <TextBlock DockPanel.Dock="Top" Text="编辑窗口" FontSize="50"/> <TextBox Grid.Row="1" Height="30" Text="{Binding Title}"/> <StackPanel Grid.Row="2" HorizontalAlignment="Right" Orientation="Horizontal" > <Button Command="{Binding SaveCommand}" Content="确定" Height="30" Width="80"/> <Button Command="{Binding CancelCommand}" Margin="10" Content="取消" Height="30" Width="80"/> </StackPanel> </Grid>
using Prism.Commands; using Prism.Mvvm; using Prism.Services.Dialogs; using System; namespace PrismWpfBlankApp.ViewModels { public class MsgViewModel : BindableBase, IDialogAware {//IDialogAware 对话框接口 public MsgViewModel() { SaveCommand = new DelegateCommand(Save); CancelCommand = new DelegateCommand(Cancel); } private string title; public string Title { get { return title; } set { SetProperty(ref title, value); } } public DelegateCommand SaveCommand { get; } public DelegateCommand CancelCommand { get; } private void Save() { //当关闭对话框时,回传参数 DialogParameters param = new DialogParameters(); param.Add("Value", Title); RequestClose?.Invoke(new DialogResult(ButtonResult.OK, param)); } private void Cancel() { RequestClose?.Invoke(new DialogResult(ButtonResult.No)); } #region 接口 public event Action<IDialogResult> RequestClose; public bool CanCloseDialog() {//是否允许关闭窗口 return true; } public void OnDialogClosed() {//窗口关闭之后的处理业务 } public void OnDialogOpened(IDialogParameters parameters) {//打开窗口之前 Title = parameters.GetValue<string>("Value");//获取传入的参数 } #endregion } }
protected override void RegisterTypes(IContainerRegistry containerRegistry) { //注册对话框视图 containerRegistry.RegisterDialog<MsgView, MsgViewModel>(); }
public class MainWindowViewModel : BindableBase { private readonly IDialogService m_DialogService; private string _title = "Prism Application"; public string Title { get { return _title; } set { SetProperty(ref _title, value); } } public MainWindowViewModel(IDialogService dialogService) { OpenACommand = new DelegateCommand(OpenA); m_DialogService = dialogService; } public DelegateCommand OpenACommand { get; } private void OpenA() { DialogParameters param=new DialogParameters(); param.Add("Value", "传入的参数"); m_DialogService.ShowDialog(nameof(MsgView), param, result => { if(result.Result== ButtonResult.OK) { //得到返回参数的结果 Title = result.Parameters.GetValue<string>("Value"); } }); } }