Cam*_*and 23
我会使用服务来显示对话框.然后,该服务还可以将视图与视图模型链接.
public interface IDialogService {
void RegisterView<TView, TViewModel>() where TViewModel:IDialogViewModel;
bool? ShowDialog(IDialogViewModel viewModel);
}
public interface IDialogViewModel {
bool CanClose();
void Close();
}
Run Code Online (Sandbox Code Playgroud)
RegisterView只是将视图类型与ViewModel类型链接起来.您可以在模块初始化中设置这些链接.这比尝试让模块在应用程序的顶层注册datatemplates更简单.
ShowDialog显示要显示的ViewModel.它返回true,false和null,就像Window.ShowDialog方法一样.该实现只是TView从容器中创建一个新的类型视图,将其连接到提供的ViewModel,并显示它.
IDialogViewModel 为ViewModel提供了一种机制,可以进行验证并取消关闭对话框.
我有一个标准的对话窗口,里面有一个内容控件.当ShowDialog被调用它会创建一个新的标准对话框,添加视图到内容控制,挂接视图模型,并将其显示.标准对话框已经有[OK]和[Cancel]按钮,并带有适当的逻辑来调用正确的方法IDialogViewModel.
Gro*_*kys 13
我这样做的方法是使用中介模式.当ViewModel想要显示一个对话框时,它会发送一条消息,该消息由应用程序的主窗口拾取.该消息包含对话框使用的ViewModel的实例.
然后,主窗口构造对话框窗口的实例,将视图模型传递给它并显示对话框.对话框的结果将传递回原始消息中的调用者.
它看起来像这样:
在您的视图模型中:
DialogViewModel viewModel = new DialogViewModel(...);
ShowDialogMessage message = new ShowDialogMessage(viewModel);
_messenger.Broadcast(message);
if (message.Result == true)
{
...
}
Run Code Online (Sandbox Code Playgroud)
在主窗口中代码隐藏:
void RecieveShowDialogMessage(ShowDialogMessage message)
{
DialogWindow w = new DialogWindow();
w.DataContext = message.ViewModel;
message.Result = w.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)
我希望这足以让你有这个想法......
| 归档时间: |
|
| 查看次数: |
35805 次 |
| 最近记录: |