C# Messages dialog使用MahApps.Metro和MVVM Light Toolkit通过DialogCoordinator启动ViewModel

C# Messages dialog使用MahApps.Metro和MVVM Light Toolkit通过DialogCoordinator启动ViewModel,c#,wpf,xaml,mvvm,dialog,C#,Wpf,Xaml,Mvvm,Dialog,我在一个WPF项目中遇到了一个问题,在这个项目中我使用了“MVVMLightToolkit”和“MahApps.Metro” 我正在尝试使用“MahApps.Metro”提供的“DialogCoordinator”功能来触发ViewModels的对话框消息。但是,在执行方法“ShowMessageAsync”时,没有发生任何事情。整个设置是根据文档执行的,无法确定不工作的原因 以下是相关代码 所需的XAML属性: xmlns:Dialog="clr-namespace:MahApps.Metro

我在一个WPF项目中遇到了一个问题,在这个项目中我使用了“MVVMLightToolkit”和“MahApps.Metro”

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

以下是相关代码

所需的XAML属性:

xmlns:Dialog="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
Dialog:DialogParticipation.Register="{Binding}"
ViewModelLocator builder注册MainViewModel使用的对话框协调器:

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>();
}
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;
}
公共中继命令关闭窗口
{
得到
{
返回关闭窗口
?(_closingWindow=新的RelayCommand(ExecuteClosingWindow));
}
}
私人中继命令关闭窗口;
私有异步void ExecuteClosingWindow(CancelEventArgs e)
{
如果(!iQuitConfirmation)返回;
var result=wait_dialogCoordinator.ShowMessageAsync(这是“Teste”、“Teste”、MessageDialogStyle.AffirmativeAndNegative、新MetroDialogSettings
{
确认按钮text=“确定”,
NegativeButtonText=“CANCELAR”,
AnimateShow=true,
AnimateHide=false
});            
if(result==MessageDialogResult.Negative)
e、 取消=真;
}

我确定了原因。这太简单了,太傻了。 这个RelayCommand在我的主窗口的关闭事件中被拍摄。由于应用程序的执行性很强,并且方法是异步的,因此事件在触发消息之前以并行操作结束


无论如何,谢谢你的关注

我不确定我是否理解这个问题。调用了ShowMessageAsync(),但未发生任何操作?所以没有例外,屏幕上什么都没有?对不起,我的英语不好。但是,确实如此。已调用ShowMessageAsync(),但未发生任何操作。