using MAX.Core.Commons; using Prism.Commands; using Prism.Mvvm; using Prism.Services.Dialogs; using System; using System.Threading.Tasks; using System.Windows; using System.Windows.Input; using System.Windows.Media; namespace Store.Management.Framework.Controls; public static class IDialogServiceExtension { public static void ShowDialog(this IDialogService dialogService, string name, TParameter parameter, Action callback) where TParameter : class { dialogService.ShowDialog(name, new DialogParameters { {"parameter", parameter}, }, callback); } public static void Show(this IDialogService dialogService, string name, TParameter parameter, Action callback) where TParameter : class { dialogService.Show(name, new DialogParameters { {"parameter", parameter}, }, callback); } } /// /// 确定取消对话框 ViewModel /// public class ConfirmDialogViewModel : BindableBase, IDialogAware { public ConfirmDialogViewModel() { } private string title = ""; private bool _enableConfirm = true; private bool _ShowConfirm = true; private bool _ShowCancel = true; private bool _ShowErrorMsg = true; private string _ErrorMsg = ""; private string confirmText = "确定"; private string cancelText = "取消"; private string backText = "返回"; private bool allowEscape = true; private bool allowEnter = true; private bool isLoading = false; public string Title { get => title; protected set => SetProperty(ref title, value); } public bool AllowEscape { get => allowEscape; set => SetProperty(ref allowEscape, value); } public bool AllowEnter { get => allowEnter; set => SetProperty(ref allowEnter, value); } public bool IsLoading { get => isLoading; set => SetProperty(ref isLoading, value, () => { AllowEscape = !value; AllowEnter = !value; EnableConfirm = !value; }); } // // // private SolidColorBrush _Underpaint = new SolidColorBrush(Color.FromRgb(238, 238, 238)); /// /// 背景底色 /// public SolidColorBrush Underpaint { get => _Underpaint; set => SetProperty(ref _Underpaint, value); } public event Action RequestClose; protected void OnRequestClose(IDialogResult result) { RequestClose?.Invoke(result); } public virtual bool CanCloseDialog() { return true; } public virtual void OnDialogClosed() { } public virtual void OnDialogOpened(IDialogParameters parameters) { } public bool EnableConfirm { get => _enableConfirm; set => SetProperty(ref _enableConfirm, value); } public bool ShowConfirm { get => _ShowConfirm; set => SetProperty(ref _ShowConfirm, value); } public bool ShowCancel { get => _ShowCancel; set => SetProperty(ref _ShowCancel, value); } public bool ShowErrorMsg { get => _ShowErrorMsg; set => SetProperty(ref _ShowErrorMsg, value); } public string ConfirmText { get => confirmText; set => SetProperty(ref confirmText, value); } public string CancelText { get => cancelText; set => SetProperty(ref cancelText, value); } public string BackText { get => backText; set => SetProperty(ref backText, value); } /// /// 错误提示 /// public string ErrorMsg { get => _ErrorMsg; set => SetProperty(ref _ErrorMsg, value); } public virtual ICommand ConfirmCommand => new DelegateCommand(_Confirm); protected virtual void _Confirm() { DialogResult ret = Confirm(); if (ret != null) { RequestClose?.Invoke(ret); } } protected virtual DialogResult Confirm() { return new DialogResult(ButtonResult.OK); } public virtual ICommand CancelCommand => new DelegateCommand(_Cancel); protected virtual void _Cancel() { DialogResult ret = Cancel(); if (ret != null) { RequestClose?.Invoke(ret); } else { RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel)); } } protected virtual DialogResult Cancel() { return new DialogResult(ButtonResult.Cancel); } public virtual void Loaded(object content) { var bb = Application.Current.TryFindResource("BackgroundBrush") as SolidColorBrush; if (bb != null) { Underpaint = bb; } } public class AsyncConfirmDialogViewModel : ConfirmDialogViewModel { public override ICommand ConfirmCommand => new AsyncDelegateCommand(_Confirm); protected new async Task _Confirm() { DialogResult ret = await Confirm(); if (ret != null) { OnRequestClose(ret); } } protected new virtual async Task Confirm() { return await Task.FromResult(new DialogResult(ButtonResult.OK)); } } public interface IDialogClassParameters { } } /// 确定取消对话框 /// /// 参数Model public class ConfirmDialogViewModel : ConfirmDialogViewModel where TParameter : class { protected TParameter Parameter { get; set; } public override void OnDialogOpened(IDialogParameters parameters) { base.OnDialogOpened(parameters); if (parameters.TryGetValue("parameter", out TParameter parameter)) { Parameter = parameter; } } } public abstract class ConfirmDialogViewModel : ConfirmDialogViewModel where TParameter : class where TResult : DialogResult/*, new()*/ { protected TParameter Parameter { get; set; } public override void OnDialogOpened(IDialogParameters parameters) { base.OnDialogOpened(parameters); if (parameters.TryGetValue("parameter", out TParameter parameter)) { Parameter = parameter; } } protected override void _Confirm() { TResult ret = Confirm(); if (ret != null) { base.OnRequestClose(ret); } } protected new abstract TResult Confirm(); protected override void _Cancel() { TResult ret = Cancel(); if (ret != null) { base.OnRequestClose(ret); } else { base.OnRequestClose(new DialogResult(ButtonResult.Cancel)); } } protected new abstract TResult Cancel(); } //public abstract class ConfirmDialogParameterViewModel : ConfirmDialogViewModel //{ // public abstract class Parameter; //}