Я немного смущен поведением моего кода. Я все еще новичок в свете MVVM.Как избежать множественных представлений, возвращающих данные с той же viewmodel
У меня есть NewMessageWindow, который показан командой
private ICommand newMessageCommand;
public ICommand NewMessageCommand
{
get
{
if (newMessageCommand == null)
newMessageCommand = new RelayCommand(() =>
{
new NewMessageWindow().Show();
});
return newMessageCommand;
}
}
Там может быть несколько NewMessageWindows и каждый из них должен иметь отдельный ViewModel. Но я заметил, когда открываю несколько окон, и если я что-то меняю в них, это затрагивает все окна. Например, когда я изменяю combobox, тогда значения combox изменяются во всех окнах.
Как этого избежать? Как открыть несколько окон с seprate viewmodels, которые не повлияют друг на друга?
Объекты, которые меняются: ObservableCollections, которые обязательны для просмотра.
Edit:
Это как ViewLocator выглядит
public NewMessageWindowModel NewMessage
{
get
{
return ServiceLocator.Current.GetInstance<NewMessageWindowModel>();
}
}
и в конструкторе
SimpleIoc.Default.Register<NewMessageWindowModel>();
Это как вяжущие выглядит так:
DataContext="{Binding NewMessage,
Source={StaticResource Locator}}"
Я фиксированный probl em с
ServiceLocator.Current.GetInstance<NewMessageWindowModel(System.Guid.NewGuid().ToString());
но я читал, что старые экземпляры кэшируются. Как избавиться от них?
У каждого вида есть своя модель? Если все представления имеют одну и ту же модель просмотра, то ваша функция INofifyPropertyChanged (или аналогичная реализация MVVM) будет уведомлять обо всех окнах и соответственно изменять их. –
как я могу проверить его? Все они расширяются 'ViewModelBase' – Robert
Не видя больше кода, сложно сказать; Я предполагаю, что ваши взгляды - это окна XAML, устанавливаете ли вы каждый файл datacontext для другой модели представления? –