2012-04-02 64 views
0

在我的應用程序中,我使用了多個具有相同視圖 - 視圖模型對的窗口。我也使用統一容器。如何使用統一容器區分多個視圖/視圖模型對

我最近通過Grant Frisken(代碼項目)添加了一個翻譯模塊,WPF使用RESX文件進行本地化。現在,如果我改變語言,viewmodel的構造函數會再次執行,並且不存儲變量。該視圖仍然將其datacontext設置爲該視圖模型的某個實例,但所有視圖都使用相同的視圖模型。

目前我認爲我使用了錯誤的方法,但是更好的解決方案是什麼?

打開一個新的窗口:

var openWindow = new MyView(); 
    openWindow.Show(); 

在我的XAML:

DataContext="{Binding MyViewModel, Source={StaticResource Locator}}" 

在我的視圖模型

private IMyWindowData _data; 

    [InjectionConstructor] 
    protected SettingsBaseViewModel(IMyWindowData data) 
    {       
     _data = windows; 
    } 

這一切,直到我實現了新的語言模塊正常工作。當我選擇更改語言時,變量_data消失。然後注入構造函數具有其他窗口的數據也是同一類型的。

我拼命搜查互聯網,但沒有找到答案。

回答

2

我找到了我的問題的解決方案。關於此事閱讀Laurent Bugnion his post。在我的項目中,我使用他的mvvm light框架和可以無限實例化的viewmodelLocater。

DataContext = ((ViewModelLocator)Application.Current.Resources["Locator"]) 
    .WindowData(Guid.NewGuid); 

被放置在每個視圖的後端。一旦View被關閉,垃圾收集器將自動收集ViewModel。

public DataModel WindowData(Guid uniqueId) 
    { 
     return BootStrapper.Container.Resolve<DataModel>(uniqueId.ToString()); 
    } 

統一容器在每次創建不同名稱時實例化新對象。

相關問題