c# - 消息对话框使用 MahApps.Metro 和 MVVM Light Toolkit 通过 DialogCoordinator 触发 ViewModel

标签 c# wpf xaml mvvm dialog

我在使用“MVVM Light Toolkit”和“MahApps.Metro”的 WPF 项目中遇到问题。

我正在尝试使用“MahApps.Metro”提供的功能“DialogCoordinator”来触发我的 ViewModel 的对话消息。但是,在执行“ShowMessageAsync”方法时,什么也没有发生。整个设置是根据文档执行的,无法确定不工作的原因。

以下相关代码。

必需的 XAML 属性:

xmlns:Dialog="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
Dialog:DialogParticipation.Register="{Binding}"

ViewModelLocator 构建器注册 MainViewModel 使用的 DialogCoordinator:

static ViewModelLocator()
{
    ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

    if (ViewModelBase.IsInDesignModeStatic)
    {
        SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
    }
    else
    {
        SimpleIoc.Default.Register<IDataService, DataService>();
    }

    SimpleIoc.Default.Register<IDialogCoordinator, DialogCoordinator>();
    SimpleIoc.Default.Register<MainViewModel>();
}

生成器 MainViewModel:

public MainViewModel(IDialogCoordinator dialogCoordinator)
{
    _dialogCoordinator = dialogCoordinator;            
}

负责触发消息的 RelayCommand:

public RelayCommand<CancelEventArgs> ClosingWindow
{
    get
    {
        return _closingWindow
            ?? (_closingWindow = new RelayCommand<CancelEventArgs>(ExecuteClosingWindow));
    }
}
private RelayCommand<CancelEventArgs> _closingWindow;
private async void ExecuteClosingWindow(CancelEventArgs e)
{
    if (!IsQuitConfirmation) return;

    var result = await _dialogCoordinator.ShowMessageAsync(this, "Teste", "Teste", MessageDialogStyle.AffirmativeAndNegative, new MetroDialogSettings
    {
        AffirmativeButtonText = "OK",
        NegativeButtonText = "CANCELAR",
        AnimateShow = true,
        AnimateHide = false
    });            

    if (result == MessageDialogResult.Negative)
        e.Cancel = true;
}

最佳答案

我找出了原因。它是如此简单以至于愚蠢。 这个 RelayCommand 在我的 MainWindow 的 Closing 事件中被触发。由于应用程序具有很强的性能并且方法是异步的,因此事件在触发消息之前以并行操作结束。

无论如何,感谢您的关注!

关于c# - 消息对话框使用 MahApps.Metro 和 MVVM Light Toolkit 通过 DialogCoordinator 触发 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35607974/

相关文章:

xaml - 如何在使用 xamarin shell 时更改状态栏颜色

c# - WPF 链绑定(bind)

c# - 如何获取元素的父元素?

c# - 有什么方法可以解决 FileSystemInfo.Fullname 有时抛出的 PathTooLongException?

c# - 每种类型的最新记录?

c# - 如何在 WPF 中更改 MouseOver 上的 MenuItem 的背景

wpf - MVVM 中的模型有什么?

c# - BindingExpression.UpdateSource 吞下异常

c# - WPF ComboBox...如何设置 .Text 属性?

c# - Linq-To-Sql 的工作单元模式与事务范围?