WPF View устанавливает нулевые свойства ViewModel при закрытии
У меня есть приложение, в котором я отображаю UserControls в GroupBox. Чтобы отобразить элементы управления, я связываюсь со свойством в ViewModel главной формы, которое возвращает ViewModel, которая должна быть отображена. Я настроил DataTemplates так, чтобы форма автоматически знала, какой UserControl / View использовать для отображения каждой ViewModel.
Когда я отображаю другой UserControl, я сохраняю активным ViewModel предыдущего элемента управления, но WPF автоматически отбрасывает представления.
Проблема, с которой я сталкиваюсь, заключается в том, что, когда представление закрывается, любые двухсторонние привязки к свойствам в ViewModel немедленно устанавливаются в null, и поэтому, когда я снова отображаю ViewModel, все значения просто устанавливаются в NULL в UI.
Я предполагаю, что это потому, что как часть представления закрывается, он удаляет и очищает любые значения в элементах управления, которые он содержит, и, поскольку привязки на месте, они распространяются и до ViewModel.
DataTemplates в моих ресурсах
<code><DataTemplate DataType="{x:Type vm:HomeViewModel}"> <vw:HomeView /> </DataTemplate> <DataTemplate DataType="{x:Type vm:SettingsViewModel}"> <vw:SettingsView /> </DataTemplate> <DataTemplate DataType="{x:Type vm:JobListViewModel}"> <vw:JobListView /> </DataTemplate> </code>
Код, используемый для отображения пользовательских элементов управления
<code><GroupBox> <ContentControl Content="{Binding Path=RightPanel}" /> </GroupBox> </code>
Пример элемента управления, который я связываю в одном из представлений:
<code> <ComboBox Name="SupervisorDropDown" ItemsSource="{Binding Path=Supervisors}" DisplayMemberPath="sgSupervisor" SelectedValuePath="idSupervisor" SelectedValue="{Binding Path=SelectedSupervisorID}" /> </code>
и соответствующие свойства ViewModel:
<code>public ObservableCollection<SupervisorsEntity> Supervisors { get { return supervisors; } } public int? SelectedSupervisorID { get { return selectedSupervisorID; } set { selectedSupervisorID = value; this.OnPropertyChanged("SelectedSupervisorID"); } } </code>
Любая идея о том, как остановить мои представления обнулить значения в моих ViewModels? Я думаю, что, возможно, мне нужно установить для DataContext представления значение null, прежде чем оно закроется, но я не уверен, как это сделать с тем, как вещи в настоящее время являются обязательными.