2012-04-02 78 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()); 
    } 

统一容器在每次创建不同名称时实例化新对象。

相关问题