我试图从在视图模型按钮命令中作为窗口/对话框打开的视图模型关闭用户控件。打开一个用户控件作为窗口/对话框: MainWindow >> Button >> Command via MainWindowViewModel >> Show usercontrol as window/dialog关闭上一步打开的用户控件:????另外我想知道我是否违反了 mvvm 模式,所以如果有人可以为我提供一些适当的例子,因为我对 wpf MVVM 模式相当陌生。视图模型中的主窗口按钮命令:private void ExecuteOtherMethod(object parameter) { registerWindow win = (registerWindow)Application.Current.MainWindow; //win.pp.IsOpen = true; win.bankRectangle.Visibility = Visibility.Visible; Window window = new Window { WindowStyle = WindowStyle.None, SizeToContent = SizeToContent.WidthAndHeight, ResizeMode = ResizeMode.NoResize, Content = new otherOptionsView() }; window.Owner = win; window.WindowStartupLocation = WindowStartupLocation.CenterOwner; window.ShowDialog(); }关闭用户控件的用户控件视图模型: private void ExecuteMethod(object parameter) { //otherOptionsView newview = new otherOptionsView(); //Window parentWindow = (Window)newview.Parent; //parentWindow.Close(); var displayViews = App.Current.Windows.OfType<otherOptionsView>(); if (displayViews.Any()) displayViews.First().Close(); registerWindow win = (registerWindow)Application.Current.MainWindow; win.bankRectangle.Visibility = Visibility.Collapsed; }
2 回答
30秒到达战场
TA贡献1828条经验 获得超6个赞
一种方法是根本没有窗口(如果它不是主窗口),如这里接受的答案中使用 MVVM 处理 WPF 中的对话框。在您的窗口中有一个自由浮动的用户控件,并将其可见性绑定到视图模型中的布尔值。
您还可以在WPF (MVVM) 中引发事件并在视图中处理它:Closing a view from Viewmodel? .
另一种方法是使用 ViewModel messenger 或 Mediator。这需要视图中的代码隐藏,并且通常不用于视图模型和视图之间的通信。您将视图注册到中介类并侦听视图模型通过中介发送的特定“关闭”请求。如使用 MVVM Light 的 Messenger 在视图模型之间传递值
另外,如果您实际上是在尝试关闭主窗口,为什么不使用Application.Current.Shutdown()
?
- 2 回答
- 0 关注
- 416 浏览
添加回答
举报
0/150
提交
取消