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