私は他のビューで使用する患者リストのユーザーコントロールを持っています。しかし、患者の1つを選択すると、その選択はユーザコントロールのインスタンスを含むすべてのビューに伝播されます。各ビューを各ビューのユーザーコントロールの新しいインスタンスをインスタンス化するにはどうすればよいですか? 私はCを使用していますMVVMLight UserControlビューモデル - ビューごとにユーザーコントロールの新しいインスタンスを作成します。
答えて
あなたが言ったことから推測、私はあなたの静的インスタンスをあなたのロケータからPatientViewModelを返すと仮定したいと思います。これを解決するには、プロパティが呼び出されたときにビューモデルの新しいインスタンスが生成されることを確認します。
編集:ロケータ異なるインスタンス生成方法
public class ViewModelLocator
{
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
//if (ViewModelBase.IsInDesignModeStatic)
//{
// // Create design time view services and models
// SimpleIoc.Default.Register<IDataService, DesignDataService>();
//}
//else
//{
// // Create run time view services and models
// SimpleIoc.Default.Register<IDataService, DataService>();
//}
SimpleIoc.Default.Register<MainViewModel>();
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}
public MainViewModel StaticMain
{
get
{
return _staticMain ?? (_staticMain = new MainViewModel());
}
}
private static MainViewModel _staticMain;
public MainViewModel NewMain
{
get
{
return new MainViewModel();
}
}
public MainViewModel NewIocMain
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>(Guid.NewGuid().ToString());
}
}
public static void Cleanup()
{
// TODO Clear the ViewModels
}
}
Main
プロパティでは、インスタンスを作成するためにLauentのSimpleIoc
コンテナを使用しています。このコンテナのプロパティの1つは、すべての型をシングルトンとして扱うことです。したがって、このVM生成メソッドを使用すると、ビュー全体でVMを共有します。プロパティはほとんど同じですが、Laurentのコンテナを使用する代わりに、ビュー間で共有されるVMの静的インスタンスも保持されます。
プロパティ
NewMain
プロパティはすべての呼び出しで新しいVMを作成するため、ビュー間でVMは共有されません。プロパティ
NewIocMain
プロパティは、呼び出しごとに新しいVMを作成するため、VMはビュー間で共有されません。ただし、SimpleIoc
コンテナは作成されたインスタンスへの参照を保持します。このインスタンスは自動的に解放されません。不要になったらコンテナからインスタンスを削除するために、作成に使用したキー(Guid)を使用してSimpleIoc.Default.Unregister(key)
にコールする必要があります。
代わりのSimpleIoc
あなたは明らかに別のIOCコンテナを使用することを選ぶことができます使用して - 例えばユニティとして - あなたのインスタンスが作成され、どのくらいの時間、彼らが生きているか詳細に制御することができます。これを除いて、私はyorの場合にNewMain
のアプローチを選択します。
新しいものを返すにはどうしたらいいですか?コードは何ですか? –
@edianga編集を参照してください。 – AxelEckenberger
IOCコンテナを使用する利点は何でしょうか?この場合、s/w開発のユニティですか? –
- 1. TestNGメソッドテストごとに新しいインスタンスを作成する
- 2. NLogクラスのインスタンスごとに新しいログファイルを作成
- 3. トランザクションごとにCloudTableClientとCloudTableの新しいインスタンスを作成する
- 4. 新しいバージョンごとに新しいフォルダを作成する
- 5. jsの新しいレコードごとに新しい行を作成
- 6. ES6で作成された新しいインスタンスごとに別のスコープを渡す
- 7. MVVMLight複数のインスタンス化されたViewModels対応するビュー
- 8. Javascript/Node Js - インスタンスごとに新しい変数を作成する
- 9. テストメソッドごとに新しいWebDriverインスタンス?
- 10. Backbone.marionnette - リビルドイベントと新しいビューの作成
- 11. symfonyは新しいインスタンスとして新しいサービスを作成します
- 12. Dockerは新しいイメージとインスタンスを作成します
- 13. ページごとにSilverlight UserControlのインスタンスを1つしか持てませんか?
- 14. node.jsはクライアントごとにサーバーのインスタンスを作成していますか?
- 15. スパークタスクに新しいS3クライアントのインスタンスを作成します
- 16. __init __(self、list = [])は、インスタンス化ごとに新しいリストではなくリストを作成しますか?
- 17. 新しいリクエストごとに新しいスレッドを作成するWCFサービス
- 18. AngularJSとPHPがリクエストごとに新しいセッションを作成します
- 19. MVVMLightのXamarin Android:ビュー階層を作成した元のスレッドのみビューにアクセスできます
- 20. NAudio - 再生ごとにOffsetSampleProviderの新しいインスタンスを作成する必要があります
- 21. ExecutorService - クラスごとに1つのメソッドに対して新しいインスタンスを作成する
- 22. サービスがメディアプレーヤーの新しいインスタンスを作成しています
- 23. Java:UIクラスの新しいインスタンスを作成
- 24. Excel VBA - 1200行ごとに新しい行を作成する
- 25. ループごとに新しいnumpy配列データセットを作成する
- 26. ノード/ JSはインポート時に新しいインスタンスを作成します
- 27. 同時に新しいインスタンスを更新して作成する
- 28. Jinja2:3つのアイテムごとに新しい行を作成
- 29. JS:プラグインの一意の新しいインスタンスを作成します。
- 30. mvvmlight - 「正しい方法」</p> <p>ビューモデル
現在、ユーザーコントロールをどのように扱っているかを示すコード/ XAMLを投稿してください。 – ken2k
私はコード/ XAMLをken2kの記述通りに見る必要があると思いますが、あなたがsiutuationのあなたの見解がwrogn方法であるかのように聞こえると言いました。 "各ビューを各ビューのユーザーコントロールの新しいインスタンスをインスタンス化するにはどうすればいいですか?"、各ユーザーコントロールに新しいインスタンスが必要ないのは確かですか?あなたと同様に、すべてのビューの共有モデルが必要です。つまり、見ている動作が意味を成すか、または各コントロールのユーザーコントロールにバインドされたモデルのインスタンスが必要です。 –
下記の解決策をご覧ください。 –