O WPF View define as propriedades do ViewModel como nulas no fechamento
Eu tenho um aplicativo onde estou exibindo UserControls em um GroupBox. Para exibir os controles, estou vinculando a uma propriedade no ViewModel do formulário principal, que retorna um ViewModel a ser exibido. Eu tenho o DataTemplates configurado para que o formulário saiba automaticamente qual UserControl / View usar para exibir cada ViewModel.
Quando exibo um UserControl diferente, mantenho o ViewModel do controle anterior ativo, mas os modos de exibição são descartados automaticamente pelo WPF.
O problema que estou tendo é que, quando a visão é desligada, quaisquer ligações bidirecionais para as propriedades no ViewModel são imediatamente definidas como nulas, e assim, quando exibo o ViewModel novamente, todos os valores são definidos como nulos no UI.
Suponho que isso se deva ao fato de que, como parte do fechamento do View, ele descarta e limpa todos os valores nos controles que contém e, como as ligações estão em vigor, elas também se propagam para o ViewModel.
DataTemplates nos meus recursos
<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>
Código usado para exibir os controles do usuário
<code><GroupBox> <ContentControl Content="{Binding Path=RightPanel}" /> </GroupBox> </code>
Exemplo de um controle que estou vinculando em uma das exibições:
<code> <ComboBox Name="SupervisorDropDown" ItemsSource="{Binding Path=Supervisors}" DisplayMemberPath="sgSupervisor" SelectedValuePath="idSupervisor" SelectedValue="{Binding Path=SelectedSupervisorID}" /> </code>
e as propriedades relevantes do ViewModel:
<code>public ObservableCollection<SupervisorsEntity> Supervisors { get { return supervisors; } } public int? SelectedSupervisorID { get { return selectedSupervisorID; } set { selectedSupervisorID = value; this.OnPropertyChanged("SelectedSupervisorID"); } } </code>
Alguma ideia de como impedir que minhas exibições anulem os valores em meus ViewModels? Eu estou pensando que talvez eu precise definir o DataContext da View como nulo antes de ser fechado, mas não tenho certeza de como fazer isso com a maneira como as coisas são atualmente vinculantes.