Caliburn ShowDialog和MessageBox

Mar*_*tus 4 c# wpf messagebox mvvm caliburn.micro

我正在使用caliburn为MVVM制作一个小型演示应用程序。

现在,我想展示一种MessageBoxMVVM方式。

对于对话框,我创建了一个事件,该事件在ShellView(根视图)中处理,并且仅WindowManager.ShowDialog使用Dialogs ViewModel类型进行调用。似乎对我来说坚持MVVM。

但是,显示消息框并获取其结果的方法是什么(好的还是取消的)?

我已经看到了这个问题,但是也没有答案。

艾森伯格先生亲自回答

“ Caliburn具有用于调用自定义消息框的内置服务。”

谁能说出他的意思?我没有在样本中看到它。

Pat*_*iek 5

如前所述,您只需准备视图模型(例如ConfirmationBoxViewModel)和适当的视图。您将必须创建两个动作(从继承视图模型之后Screen,这是必须使用的操作TryClose。您始终可以IScreen代替实现,但这将需要更多工作):

public void OK()
{
    TryClose(true);
}

public void Cancel()
{
    TryClose(false);
} 
Run Code Online (Sandbox Code Playgroud)

然后在其他视图模型中:

var box = new ConfirmationBoxViewModel()
var result = WindowManager.ShowDialog(box);
if(result == true)
{
// OK was clicked
}
Run Code Online (Sandbox Code Playgroud)

请注意,对话框关闭后,如果需要从对话框中提取其他数据(例如,“选定项”,“显示名称”等),则可以访问视图模型属性。


Ibr*_*jar 5

在文章Billy Hollis Hybrid Shell (由框架协调员编写)中,作者展示了一种处理对话框和消息框的好方法,但是他使用了依赖注入(您当然可以不用DI,但是会使事情变得更简单)。主要思想是,您可以让您的主窗口(用作应用程序外壳程序)实现一个类似于以下内容的接口:

public interface IDialogManager
    {

        void ShowDialog(IScreen dialogModel);
        void ShowMessageBox(string message, string title = null, MessageBoxOptions options = MessageBoxOptions.Ok, Action<IMessageBox> callback = null);

    }
Run Code Online (Sandbox Code Playgroud)

然后他在IoC容器中注册了此接口,我想您可以从那里开始发挥您的想象力,如果您没有时间,可以查看本文附带的源代码

  • @IbrahimNajjar 答案中提到的所有链接都已过期。你有更新的链接吗? (3认同)