У меня есть приложение, в котором я отображаю пользовательские элементы управления в GroupBox. Чтобы отобразить элементы управления, я связываюсь со свойством в ViewModel главной формы, которое возвращает ViewModel для отображения. Я настроил DataTemplates так, чтобы форма автоматически знала, какой UserControl / View использовать для отображения каждой ViewModel.
Когда я отображаю другой UserControl, я сохраняю активным ViewModel предыдущего элемента управления, но WPF автоматически отбрасывает представления.
Проблема, с которой я сталкиваюсь, заключается в том, что при закрытии представления любые двусторонние привязки к свойствам в ViewModel немедленно устанавливаются в null, и поэтому, когда я снова отображаю ViewModel, все значения просто устанавливаются в нуль в пользовательском интерфейсе.
Я предполагаю, что это потому, что как часть представления закрывается, он удаляет и очищает любые значения в элементах управления, которые он содержит, и поскольку привязки на месте, они распространяются и на ViewModel.
Шаблоны данных в моих ресурсах
<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>
Код, используемый для отображения пользовательских элементов управления
<GroupBox>
<ContentControl Content="{Binding Path=RightPanel}" />
</GroupBox>
Пример элемента управления, который я связываю в одном из представлений:
<ComboBox Name="SupervisorDropDown" ItemsSource="{Binding Path=Supervisors}" DisplayMemberPath="sgSupervisor"
SelectedValuePath="idSupervisor" SelectedValue="{Binding Path=SelectedSupervisorID}" />
и соответствующие свойства ViewModel:
public ObservableCollection<SupervisorsEntity> Supervisors
{
get
{
return supervisors;
}
}
public int? SelectedSupervisorID
{
get
{
return selectedSupervisorID;
}
set
{
selectedSupervisorID = value;
this.OnPropertyChanged("SelectedSupervisorID");
}
}
Есть идеи, как остановить мои представления, обнуляющие значения в моих моделях представления? Я думаю, что, возможно, мне нужно установить для DataContext представления значение null, прежде чем оно закроется, но я не уверен, как это сделать с тем, как все в настоящее время является обязательным.