Mam aplikację, w której wyświetlam UserControls w GroupBox. Aby wyświetlić formanty, wiążę właściwość w ViewModel głównego formularza, który zwraca ViewModel do wyświetlenia. Mam DataTemplates skonfigurowane tak, aby formularz automatycznie wiedział, które UserControl/View użyć do wyświetlenia każdego ViewModel.Widok WPF Ustawia właściwości ViewModel na wartość null przy zamykaniu
Kiedy wyświetlić inny UserControl, trzymam ViewModel poprzedniej kontroli aktywny, ale widoki są usuwane automatycznie przez WPF.
Problem, który mam, polega na tym, że gdy widok zostanie zamknięty, wszelkie dwukierunkowe powiązania z właściwościami w ViewModelu są natychmiast ustawiane na wartość null, a gdy ponownie wyświetlam ViewModel, wszystkie wartości są ustawione do wartości null w interfejsie użytkownika.
Zakładam, że jest to spowodowane tym, że jako część zamknięcia widoku, zawiera i kasuje wszelkie wartości w kontrolkach, które zawiera, a ponieważ powiązania są na miejscu, propagują również do modelu ViewModel.
DataTemplates w moich zasobach
<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>
kod używany do wyświetlania użytkownik kontroluje
<GroupBox>
<ContentControl Content="{Binding Path=RightPanel}" />
</GroupBox>
przykładem kontrolą że jestem wiązania w jednym z widoków:
<ComboBox Name="SupervisorDropDown" ItemsSource="{Binding Path=Supervisors}" DisplayMemberPath="sgSupervisor"
SelectedValuePath="idSupervisor" SelectedValue="{Binding Path=SelectedSupervisorID}" />
i odpowiednie właściwości ViewModel:
public ObservableCollection<SupervisorsEntity> Supervisors
{
get
{
return supervisors;
}
}
public int? SelectedSupervisorID
{
get
{
return selectedSupervisorID;
}
set
{
selectedSupervisorID = value;
this.OnPropertyChanged("SelectedSupervisorID");
}
}
Każdy pomysł, w jaki sposób zatrzymać moich poglądów Zerowanie wartości w moich ViewModels? Myślę, że być może trzeba ustawić DataContext widoku null, zanim zostanie ona zamknięta, ale nie jestem pewien, jak to zrobić z tym, jak rzeczy są obecnie wiążące.
Znam ten sam problem. Ustawienie DataContext dzieci wizualnych na wartość null częściowo rozwiązało problem. Ukrywanie widoku zamiast go niszczyć nie robiło różnicy. Wciąż szukam kompletnego rozwiązania. – HappyNomad