In der WPF-Ansicht werden die ViewModel-Eigenschaften beim Schließen auf Null gesetzt

Ich habe eine Anwendung, in der UserControls in einer GroupBox angezeigt werden. Zum Anzeigen der Steuerelemente bin ich an eine Eigenschaft im ViewModel des Hauptformulars gebunden, die ein anzuzeigendes ViewModel zurückgibt. Ich habe DataTemplates so eingerichtet, dass das Formular automatisch weiß, welches UserControl / View zur Anzeige der einzelnen ViewModels verwendet werden soll.

Wenn ich ein anderes UserControl anzeige, lasse ich das ViewModel des vorherigen Steuerelements aktiv, aber die Ansichten werden von WPF automatisch verworfen.

Das Problem, das ich habe, ist, dass beim Herunterfahren der Ansicht alle bidirektionalen Bindungen an die Eigenschaften im ViewModel sofort auf Null gesetzt werden. Wenn ich also das ViewModel wieder anzeige, werden alle Werte im ViewModel einfach auf Null gesetzt Benutzeroberfläche

Ich gehe davon aus, dass dies daran liegt, dass im Rahmen des Herunterfahrens von View alle Werte in den enthaltenen Steuerelementen freigegeben und gelöscht werden. Da die Bindungen vorhanden sind, werden sie auch an das ViewModel weitergegeben.

DataTemplates in meinen Ressourcen

<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 zum Anzeigen von Benutzersteuerelementen

<code><GroupBox>
    <ContentControl  Content="{Binding Path=RightPanel}" />
</GroupBox>
</code>

Beispiel für ein Steuerelement, das ich in einem der Views binde:

<code>    <ComboBox Name="SupervisorDropDown" ItemsSource="{Binding Path=Supervisors}" DisplayMemberPath="sgSupervisor" 
           SelectedValuePath="idSupervisor" SelectedValue="{Binding Path=SelectedSupervisorID}" />
</code>

und die relevanten ViewModel-Eigenschaften:

<code>public ObservableCollection<SupervisorsEntity> Supervisors
    {
        get
        {
            return supervisors;
        }
    }

public int? SelectedSupervisorID
{
    get
    {
        return selectedSupervisorID;
    }
    set
    {
        selectedSupervisorID = value;
        this.OnPropertyChanged("SelectedSupervisorID");
    }
}
</code>

Hast du eine Idee, wie ich verhindern kann, dass meine Views die Werte in meinen ViewModels auf null setzen? Ich denke, dass ich möglicherweise den Datenkontext der Ansicht auf null setzen muss, bevor sie geschlossen wird, aber ich bin nicht sicher, wie ich das mit der Art und Weise angehen soll, wie die Dinge derzeit verbindlich sind.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage