如何使用MEF和Prism在viewmodel中导入wpf视图?

时间:2015-02-16 14:26:45

标签: c# wpf mvvm prism mef

我想在最小化时使用托盘图标的WPF应用程序。

我使用了wpf NotifyIcon, 我正在使用MEF和Prism

我的引导程序看起来像:

public class Bootstrapper : MefBootstrapper{

        protected override System.Windows.DependencyObject CreateShell() { 
            return Container.GetExportedValue<Shell>(); 
        }

        protected override void InitializeShell(){
            base.InitializeShell();    
            Application.Current.MainWindow = (Window)Shell;
            Application.Current.MainWindow.Show();               
        }

        protected override void ConfigureAggregateCatalog(){
            base.ConfigureAggregateCatalog();
            AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(Shell).Assembly));
        }
}

我将主窗口命名为Shell并添加了[Export]属性。 在我的NotifyIconViewModel for show命令中,我使用了

public ICommand ShowWindowCommand{
            get{
                return new DelegateCommand{
                    CanExecuteFunc = () => Application.Current.MainWindow == null,
                    CommandAction = () =>
                    {
                        Application.Current.MainWindow = ServiceLocator.Current.GetInstance<Shell>();
                        Application.Current.MainWindow.Show();
                    }
                };
            }
}

但它显示

  

类型&#39; System.InvalidOperationException&#39;的例外情况发生在System.Core.dll中但未在用户代码中处理   当我尝试获取Shell的实例

时抛出

我对MEF,Prism很新。我可以得到一些帮助吗?

更新: 单击关闭按钮时,将触发以下事件以关闭MainWindow。

public ICommand HideWindowCommand{
            get{
                return new DelegateCommand{
                    CommandAction = () => Application.Current.MainWindow.Close(),
                    CanExecuteFunc = () => Application.Current.MainWindow != null
                };
            }
}

0 个答案:

没有答案