Tengo una aplicación en la que estoy mostrando UserControls en un GroupBox. Para mostrar los controles, estoy vinculando a una propiedad en el modelo de vista del formulario principal, que devuelve un modelo de vista para mostrar. Tengo DataTemplates configurado para que el formulario sepa automáticamente qué UserControl/View usar para mostrar cada ViewModel.WPF View establece las propiedades de ViewModel para anular el cierre
Cuando visualizo un UserControl diferente, mantengo el ViewModel del control anterior activo, pero las Vistas son descartadas automáticamente por WPF.
El problema que tengo es que cuando la vista se apaga, cualquier enlace bidireccional a las propiedades en el modelo de vista se establece inmediatamente en nulo, por lo que cuando visualizo ViewModel nuevamente, todos los valores se han establecido anular en la interfaz de usuario.
Supongo que esto se debe a que, como parte del cierre de la vista, elimina y borra cualquier valor en los controles que contiene, y como los enlaces están en su lugar, también se propagan al ViewModel.
DataTemplates en mis recursos
<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>
código utilizado para mostrar los controles del usuario
<GroupBox>
<ContentControl Content="{Binding Path=RightPanel}" />
</GroupBox>
Ejemplo de un control que estoy de unión en una de las Vistas:
<ComboBox Name="SupervisorDropDown" ItemsSource="{Binding Path=Supervisors}" DisplayMemberPath="sgSupervisor"
SelectedValuePath="idSupervisor" SelectedValue="{Binding Path=SelectedSupervisorID}" />
y las propiedades relevantes de ViewModel:
public ObservableCollection<SupervisorsEntity> Supervisors
{
get
{
return supervisors;
}
}
public int? SelectedSupervisorID
{
get
{
return selectedSupervisorID;
}
set
{
selectedSupervisorID = value;
this.OnPropertyChanged("SelectedSupervisorID");
}
}
¿Alguna idea sobre cómo detener mis vistas anulando los valores en mi ViewModels? Estoy pensando que tal vez necesite establecer el DataContext de la Vista para que sea nulo antes de que se cierre, pero no estoy seguro de cómo hacerlo con la forma en que las cosas son actualmente vinculantes.
He encontrado este mismo problema. Establecer el DataContext de niños visuales para null lo resolvió parcialmente. Ocultar la vista en lugar de destruirla no importaba. Todavía estoy buscando una solución completa. – HappyNomad