2011-03-30 121 views
3

我有一個選項卡式應用程序,我希望用戶能夠搜索某個人,然後在新視圖中顯示該人的詳細信息。用戶應該能夠爲不同的人開放多個人員詳細信息視圖。棱鏡/ MEF新視圖沒有從MEF導入獲取新視圖模型

我有點不確定我是否按照正確的程序來創建我的新視圖。使用Unity(我不是)看起來你會打電話給Container.Resolve(view)但是我正在做以下操作,爲了在view/viewmodel中導入我的導入信息,需要使用satisfImports。

PersonDetailView view = new PersonDetailView(); 
_container.SatisfyImportsOnce(view); 
_regionManager.Regions["MainRegion"].Add(view, this.SelectedPerson.Name); 
_regionManager.RequestNavigate("MainRegion", new Uri("PersonDetailView", UriKind.Relative)); 

在我的PersonDetailView的代碼中,我有以下屬性來設置數據上下文。

[Import] 
public PersonDetailsViewModel ViewModel 
{ 
    set 
    { 
     this.DataContext = value; 
    } 
} 

這似乎是工作,但我有麻煩的是,當我創建第二人稱視角,新觀點越來越DataContext的作爲已創建視圖的同一個實例。

這是因爲我錯誤地創建了我的視圖還是有一種方式告訴MEF創建一個新的對象,當它完成我的新視圖的導入時?

回答

6

當您導出零件時,默認情況下它使用CreationPolicyShared。這基本上使導出的實例成爲容器中的單例。通過導出,添加另一個屬性:

[Export, PartCreationPolicy(CreationPolicy.NonShared)] 
public class Foo { } 

這將確保每次調用構成消費者實例時都會創建一個新實例。

+0

謝謝,我會給你一個去。 – obaylis 2011-04-01 10:02:19