爲何要單獨把這個生命週期撈出來單獨說一說呢?由於我今天就被這個東東坑了一把……新加了一個界面,第二次打開界面的時候會報錯「指定的元素已是另外一個元素的邏輯子元素」。好嘛,我一看,喲,感受就是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