using Common.PubEvent; using ControlzEx.Standard; using Prism.Commands; using Prism.Mvvm; using System.Windows.Input; namespace BaseFrame.ViewModels.Dialogs { public class MessageBoxViewModel : BindableBase, IDialogAware { #region 属性 private string _Title; public string Title { get => _Title; set => SetProperty(ref _Title, value); } private string _Message = ""; public string Message { get => _Message; set => SetProperty(ref _Message, value); } private string _Icon= $"pack://siteoforigin:,,,/Resources/Images/info.png"; public string Icon { get => _Icon; set => SetProperty(ref _Icon, value); } private bool _ShowYes; public bool ShowYes { get => _ShowYes; set => SetProperty(ref _ShowYes, value); } private bool _ShowNo; public bool ShowNo { get => _ShowNo; set => SetProperty(ref _ShowNo, value); } private bool _ShowOk; public bool ShowOk { get => _ShowOk; set => SetProperty(ref _ShowOk, value); } private bool _ShowCancel; public bool ShowCancel { get => _ShowCancel; set => SetProperty(ref _ShowCancel, value); } #endregion #region 命令 public ICommand YesCommand { get; set; } public ICommand NoCommand { get; set; } public ICommand OkCommand { get; set; } public ICommand CancelCommand { get; set; } #endregion public DialogCloseListener RequestClose { get; set; } private IEventAggregator _eventAggregator; public MessageBoxViewModel(IEventAggregator eventAggregator) { _eventAggregator= eventAggregator; YesCommand = new DelegateCommand(OnYes); NoCommand = new DelegateCommand(OnNo); OkCommand = new DelegateCommand(OnOk); CancelCommand = new DelegateCommand(OnCancel); } private void CloseDialog(ButtonResult result) { var parameters = new DialogParameters(); RequestClose.Invoke(new DialogResult(result)); } private void OnYes() => CloseDialog(ButtonResult.Yes); private void OnNo() => CloseDialog(ButtonResult.No); private void OnOk() => CloseDialog(ButtonResult.OK); private void OnCancel() => CloseDialog(ButtonResult.Cancel); #region Prism Dialog 规范 public bool CanCloseDialog() => true; public void OnDialogClosed() { _eventAggregator.GetEvent().Publish(false); } public void OnDialogOpened(IDialogParameters parameters) { Title = parameters.GetValue("Title"); Message = parameters.GetValue("Message"); var iconKey = parameters.GetValue("Icon"); // info / error / warn Icon = iconKey switch { "info" => $"pack://siteoforigin:,,,/Resources/Images/info.png", "error" => $"pack://siteoforigin:,,,/Resources/Images/error.png", "warn" => $"pack://siteoforigin:,,,/Resources/Images/warning.png", _ => $"pack://siteoforigin:,,,/Resources/Images/info.png" // 默认 }; ShowYes = parameters.GetValue("ShowYes"); ShowNo = parameters.GetValue("ShowNo"); ShowOk = parameters.GetValue("ShowOk"); ShowCancel = parameters.GetValue("ShowCancel"); } #endregion } }