Mar*_*tus 4 c# wpf messagebox mvvm caliburn.micro
我正在使用caliburn为MVVM制作一个小型演示应用程序。
现在,我想展示一种MessageBoxMVVM方式。
对于对话框,我创建了一个事件,该事件在ShellView(根视图)中处理,并且仅WindowManager.ShowDialog使用Dialogs ViewModel类型进行调用。似乎对我来说坚持MVVM。
但是,显示消息框并获取其结果的方法是什么(好的还是取消的)?
我已经看到了这个问题,但是也没有答案。
艾森伯格先生亲自回答
“ Caliburn具有用于调用自定义消息框的内置服务。”
谁能说出他的意思?我没有在样本中看到它。
如前所述,您只需准备视图模型(例如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)
请注意,对话框关闭后,如果需要从对话框中提取其他数据(例如,“选定项”,“显示名称”等),则可以访问视图模型属性。
在文章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容器中注册了此接口,我想您可以从那里开始发挥您的想象力,如果您没有时间,可以查看本文附带的源代码。
| 归档时间: |
|
| 查看次数: |
7432 次 |
| 最近记录: |