簡體   English   中英

如何從以wpf mvvm模式作為窗口打開的視圖模型中關閉用戶控件?

[英]How do you close a usercontrol from a viewmodel that was opened as a window in wpf mvvm pattern?

我試圖從在viewmodel按鈕命令中作為窗口/對話框打開的viewmodel中關閉用戶控件。

以窗口/對話框的形式打開用戶控件:MainWindow >>按鈕>>通過MainWindowViewModel進行命令>>將用戶控件顯示為窗口/對話框

關閉在上一步中打開的用戶控件:????

我也想知道我是否違反了mvvm模式,所以如果有人可以為我提供一些適當的示例,因為我對wpf MVVM模式還很陌生。

viewmodel中的mainwindow按鈕命令:

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();


    }

usercontrol viewmodel關閉用戶控件:

 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;


    }

一種方法是根本沒有任何窗口(如果不是主窗口),如此處的接受答案中所述: 使用MVVM在WPF中處理對話框 在窗口中有一個自由的浮動用戶控件,並將其可見性綁定到視圖模型中的布爾值。

您還可以像在WPF(MVVM)中一樣引發事件並在視圖中處理該事件:從Viewmodel關閉視圖?

另一種方法是使用ViewModel Messenger或Mediator。 這需要在視圖中隱藏代碼,並且通常不用於視圖模型與視圖之間的通信。 您將視圖注冊到調解器類,並偵聽視圖模型通過調解器發送的特定“關閉”請求。 使用MVVM Light的Messenger一樣,在視圖模型之間傳遞值

另外,如果您實際上要關閉主窗口,為什么不使用Application.Current.Shutdown()

對於窗口管理,您始終可以使用nuget包“ MvvmDialogs”,它是專門為幫助您處理窗口父子關系而設計的,並且具有大量示例應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM