我在使用“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/