コードの動作に少し混乱しています。私はまだMVVMライトの初心者です。
コマンドで表示される NewMessageWindow があります
private ICommand newMessageCommand;
public ICommand NewMessageCommand
{
get
{
if (newMessageCommand == null)
newMessageCommand = new RelayCommand(() =>
{
new NewMessageWindow().Show();
});
return newMessageCommand;
}
}
複数の NewMessageWindows が存在する可能性があり、それぞれに個別の ViewModel が必要です。しかし、複数のウィンドウを開いたときに気付きました。それらのウィンドウで何かを変更すると、すべてのウィンドウに影響します。たとえば、コンボボックスを変更すると、すべてのウィンドウでコンボボックスの値が変更されます。
それを避ける方法は?互いに影響を与えない別々のビューモデルで複数のウィンドウを開くにはどうすればよいですか?
変化するオブジェクトは、ビューにバインドされたObservableCollectionsです。
編集:
これはViewLocatorがどのように見えるかです
public NewMessageWindowModel NewMessage
{
get
{
return ServiceLocator.Current.GetInstance<NewMessageWindowModel>();
}
}
そしてコンストラクターで
SimpleIoc.Default.Register<NewMessageWindowModel>();
バインディングは次のようになります。
DataContext="{Binding NewMessage,
Source={StaticResource Locator}}"
問題を修正しました
ServiceLocator.Current.GetInstance<NewMessageWindowModel(System.Guid.NewGuid().ToString());
しかし、古いインスタンスがキャッシュされていることを読みました。それらを取り除く方法は?