为何要单独把这个生命周期捞出来单独说一说呢?由于我今天就被这个东东坑了一把……新加了一个界面,第二次打开界面的时候会报错“指定的元素已是另外一个元素的逻辑子元素”。好嘛,我一看,哟,感受就是xaml有问题啊。固然这个代码是基于MEF框架MVVM模式的。框架
[Export("ViewA", typeof(IView))] public partial class ViewA : UserControl,IView { public ViewA() { InitializeComponent(); } }
[Export("ViewB", typeof(IView))] [PartCreationPolicy(CreationPolicy.NonShared)] public partial class ViewB : UserControl,IView { public ViewB() { InitializeComponent(); } }
为了确认是View层的问题,我就换了一下Import的View层(A变为B),结果屡次打开界面也没有问题,说明什么?A.xaml果断是有问题的。是把xaml中的全部控件都清除,只保留最底层的Grid,再打开仍是报同样的错。跟踪也看不出来,ViewModel没有问题,View的xaml也没有问题,那就只能是View的CodeBehind有问题了,一比对,果真发现少写了PartCreationPolicy。spa
上面的内容可能说的不是很清楚,可是只要知道,若是再系统中须要关闭某个界面,再从新打开时须要新建立一个实例的就不能忘记设置PartCreationPolicy.code