我对我的代码的行为有点困惑。我还是 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());
但我读过旧实例被缓存。如何摆脱它们?