切换窗口可见性实例化新窗口

时间:2016-03-17 10:02:35

标签: c# wpf prism

我有一个使用Prism的模块化应用程序。将显示一个简单的窗口(shell)。 shell包含一个任务栏图标,用于调用命令以切换窗口可见性。单击TaskbarIcon会创建我的shell的新实例,而不是切换原始实例的可见性。有人知道我的代码为什么不在第一个shell上调用该方法吗?

我的引导程序

 protected override DependencyObject CreateShell()
    {
        var shell = ServiceLocator.Current.GetInstance<Shell>();
        RegisterTypeIfMissing(typeof(Shell), typeof(Shell), true);
        return shell;

    }

    protected override void InitializeShell()
    {

        var mainWindow = (Shell)this.Shell;
        var regionManager = ServiceLocator.Current.GetInstance<IRegionManager>();
        Application.Current.MainWindow = mainWindow;
        mainWindow.Show();
}

我的taskbarIcon

<tb:TaskbarIcon
            Name="ToolbarIcon"
          IconSource="/Resources/images/icon.ico"
          ToolTipText="Some text" 
            LeftClickCommand="{StaticResource ShowWindowCommand}"/>

ShowWindowCommand

    public class ShowWindowCommand : ICommand
{
    public void Execute(object parameter)
    {
        ServiceLocator.Current.GetInstance<Shell>().toggleVisibility();
    }

    public bool CanExecute(object parameter)
    {
        return true;
    }
    public event EventHandler CanExecuteChanged;
} 

Shell.togglingVisibility()

public void toggleVisibility()
    {
        if (this.Visibility == System.Windows.Visibility.Visible){
            this.Visibility = System.Windows.Visibility.Collapsed;                
        }
        else
        {
            this.Visibility = System.Windows.Visibility.Visible;

        }  
    }

1 个答案:

答案 0 :(得分:0)

你并不总是使用单例shell。

CreateShell中,您首先获得一个 shell实例,然后将shell注册为singleton。稍后在ShowWindowCommand.Execute中,您将获得单例实例,这与您之前解析的非单例实例不同。容器应该如何知道第一个已解析的实例稍后将用作单例?在注册为单例之前,您甚至可能已经解决了多个实例...