2012-04-02 9 views
0

私のアプリケーションでは、同じview-viewmodelペアを持つ複数のウィンドウを使用します。また、私は統一コンテナを使用します。ユニティコンテナを使用して複数のビュー/ビューモデルのペアを区別する方法

私は最近、Grant Frisken(コードプロジェクト)によるRESXファイルを使用したWPFローカリゼーションモジュールを追加しました。ここで言語を変更すると、ビューモデルのコンストラクタが再度実行され、変数は保存されません。ビューはそのviewModelのインスタンスに設定されたdatacontextを持ちますが、すべてのビューは同じviewmodelを使用しています。

現在、私は間違ったアプローチをとっていると思いますが、もっと良い解決策はありますか?私のXAMLで

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

:新しいウィンドウで開く

私は新しい言語モジュールを実装するまで、このすべての私のviewmodelで

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); 

各ビューのバックエンドに配置されます。ビューが閉じられると、ガベージコレクタはViewModelを自動的に収集します。

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

ユニティコンテナは、異なる名前が作成されるたびに新しいオブジェクトをインスタンス化します。

関連する問題