首页 > 解决方案 > Prism WPF 关闭视图并处理自动装配的 ViewModel

问题描述

简而言之,我想要完成的行为是 LOGIN->LOGOUT->LOGIN

我的应用程序以登录视图开始。身份验证后,它关闭并打开 MainView:

public void Authenticated(){
    MainWindow main = new MainWindow();
    main.Show();
    if (Application.Current.Windows.Count > 1) {
        Application.Current.Windows[0].Close();
    }
    this.CloseAction();
}

CloseAction 只是一个动作变量,它像这样从代码隐藏中关闭

public partial class MainWindow : Window {
    public MainWindow() {
        InitializeComponent();
        if ( (this.DataContext as MainWindowViewModel)!.CloseAction == null )
            (this.DataContext as MainWindowViewModel)!.CloseAction = new Action(this.CloseH);
    }

    private void CloseH() {
        this.Close();
    }
}

我的主要内容还包含从 MainViewViewModel 的逻辑推送的两个视图区域(这两个是 USERCONTROLS)

_regionManager.RegisterViewWithRegion("FileTreeRegion", typeof(FileTree));
_regionManager.RegisterViewWithRegion("FileDetailsRegion", typeof(FileDetails));

在某些时候,如果我需要注销,我会运行该功能

public void Logout(){
   Login login = new Login();
   login.Show();
   if (Application.Current.Windows.Count > 1) {
       Application.Current.Windows[0].Close();
   }
   this.CloseAction();
   // _eventAggregator.GetEvent<AppMessageLogout>().Publish();
   // _regionManager.Regions.ToList().ForEach((r) => r.RemoveAll());
}

但是当我重试登录时,我的视图视图模型(用户控件 FileTree 和 FileDetails)被调用了两次(调试构造函数方法)。先前评论的行是两次尝试解决该问题但没有成功:

ViewModel 都在 xaml 文件中使用 Prism 自动装配。

标签: c#wpfprism

解决方案


推荐阅读