GroupBoxにUserControlsを表示するアプリケーションがあります。コントロールを表示するには、表示するViewModelを返すメインフォームのViewModelのプロパティにバインドします。フォームが自動的に各ViewModelを表示するために使用するUserControl/Viewを知るようにDataTemplatesを設定しました。WPF Viewは、閉じる時にViewModelプロパティをnullに設定します。
別のUserControlを表示すると、以前のコントロールのViewModelはアクティブになりますが、ビューはWPFによって自動的に破棄されます。
ビューがシャットダウンすると、ViewModelのプロパティへの双方向バインディングがすぐにnullに設定されるため、ViewModelを再度表示すると、すべての値が設定されます。 UIではnullになります。
これは、Viewの終了時に、ビューの終了時に、そのビューに含まれているコントロールの値が破棄されて消去され、バインディングが配置されているためにViewModelにも伝播するためです。
<ComboBox Name="SupervisorDropDown" ItemsSource="{Binding Path=Supervisors}" DisplayMemberPath="sgSupervisor"
SelectedValuePath="idSupervisor" SelectedValue="{Binding Path=SelectedSupervisorID}" />
:コードは、ユーザーを表示するために使用される私のリソースで
DataTemplates
<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>
例を制御します関連するViewModelプロパティ:
public ObservableCollection<SupervisorsEntity> Supervisors
{
get
{
return supervisors;
}
}
public int? SelectedSupervisorID
{
get
{
return selectedSupervisorID;
}
set
{
selectedSupervisorID = value;
this.OnPropertyChanged("SelectedSupervisorID");
}
}
私のViewModelsの値をnullにする方法はありますか?私はそれが閉じる前に、ビューのDataContextをnullに設定する必要があるかもしれないと思っていますが、物事が現在バインドされている方法についてはどうすればいいのか分かりません。
この同じ問題が発生しました。視覚的な子のDataContextをnullに設定すると、それが部分的に解決されました。ビューを隠すのではなく、ビューを隠すことで違いはありませんでした。私はまだ完全な解決策を探しています。 – HappyNomad