我想在我的MVVM WPF应用程序中显示消息框.所以从哪里调用MessageBox.Show().
我正在WPF中实现MVP/MV-VM,到目前为止我还好运.但是,我没有看到此模型如何支持实现模态对话框.我从Crack.NET(http://www.codeplex.com/cracknetproject)中获取了我的工作,以了解这些东西是如何工作的.
我有一个ShellView视图(它只是XAML),上面有一个菜单.该菜单绑定到ShellModelView中显示"EditPreferences"的命令.
ShellModelView实现了EditPreferences的ICommand,在这里我们想要设置一个对话框,让用户编辑应用程序的首选项.
这里有几个问题:1.ShellModelView没有对ShellView的引用来正确地为对话框提供父级.ShellModelView是ShellView的DataContext,但我没有看到设置的反向引用.2.无论如何,ShellModelView不应该加载显式UI.那么这里适当的交互模型是什么?3.如何构建我的PreferencesDialog,以便在逻辑和视图之间正确分隔?PreferencesDialog本身需要是一个Window,因此您可以在其上调用ShowDialog,但这意味着您需要对Window(例如View)的引用才能实例化它.理想情况下,我应该能够在PreferencesDialog中对代码/验证进行单元测试,而无需实例化视图(可能使用Mock视图?).
假设我想向用户显示一些验证错误.在MVVM模式中,我可以有一个标签绑定到我的viewmodel上的某个属性.但是,如果我想在严格遵守MVVM模式的同时显示消息框,该怎么办呢?我的viewmodel会绑定什么,以及它将如何触发创建/显示消息框?
我正在使用此代码来创建一个简单的命令:
public class SimpleCommand : ICommand
{
public Predicate<object> CanExecuteDelegate { get; set; }
public Action<object> ExecuteDelegate { get; set; }
#region ICommand Members
public bool CanExecute(object parameter)
{
if (CanExecuteDelegate != null)
return CanExecuteDelegate(parameter);
return true;// if there is no can execute default to true
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
if (ExecuteDelegate != null)
ExecuteDelegate(parameter);
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
我没写这个.但我喜欢使用它.当我使用它时,它最终会像这样:
// …
Run Code Online (Sandbox Code Playgroud)