我有与之关联的ViewModel1
和View1。我使用IWindowManager
对象从ViewModel2
(另一个视图模型)启动对话框窗口。来自ViewModel2
类的代码:
windowManager.ShowDialog(new ViewModel());
因此,我有一个带有View1用户控件的对话框窗口。
我的答案是下一步-我可以使用红色的关闭按钮关闭对话框窗口,但如何使用我的特定按钮(包含在View1
用户控件中)关闭它,类似于带有关闭命令的“取消”按钮(Command={Binding CancelCommand}
),当然CancelCommand
包含在ViewModel1
类中。
发布于 2012-07-20 04:15:48
如果视图模型扩展了Caliburn.Micro.Screen
,那就更简单了
TryClose();
发布于 2012-04-11 00:30:12
您可以通过在ViewModel上实现IViewAware
接口来获取当前视图(在本例中为对话框窗口)。然后,在执行命令时,可以在视图(作为对话框创建的Window
)上调用Close
。
最简单的原因是从ViewAware
派生
public class DialogViewModel : ViewAware
{
public void ExecuteCancelCommand()
{
(GetView() as Window).Close();
}
}
如果你不允许派生,你可以自己实现它:
public class DialogViewModel : IViewAware
{
public void ExecuteCancelCommand()
{
dialogWindow.Close();
}
private Window dialogWindow;
public void AttachView(object view, object context = null)
{
dialogWindow = view as Window;
if (ViewAttached != null)
ViewAttached(this,
new ViewAttachedEventArgs(){Context = context, View = view});
}
public object GetView(object context = null)
{
return dialogWindow;
}
public event EventHandler<ViewAttachedEventArgs> ViewAttached;
}
注意:我的示例使用的是Caliburn.Micro 1.3.1。
https://stackoverflow.com/questions/10090584
复制相似问题