【发布时间】:2016-02-24 16:42:16
【问题描述】:
我在使用“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;
}
【问题讨论】:
-
我不确定我是否理解这个问题。 ShowMessageAsync() 被调用但什么也没发生?所以也不例外,屏幕上什么都没有?
-
对不起,我的英语不太好。但是,正是它。 ShowMessageAsync() 被调用,但没有发生任何事情。