我有一个应用程序,我在GroupBox中显示UserControls。为了显示控件,我绑定了主窗体的ViewModel中的一个属性,该窗体返回一个ViewModel来显示。我已经设置了DataTemplates,以便表单自动知道使用哪个UserControl/View来显示每个ViewModel。WPF View在关闭时将ViewModel属性设置为null
当我显示一个不同的UserControl时,我保持前一个控件的ViewModel处于活动状态,但视图被WPF自动丢弃。
我遇到的问题是,当视图关闭时,对ViewModel中的属性的任何双向绑定立即设置为null,因此当我再次显示ViewModel时,所有的值都刚刚设置在UI中为null。
我认为这是因为作为View关闭的一部分,它会处理和清除它所包含的控件中的任何值,并且由于绑定已就位,它们也向下传播到ViewModel。
的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>
实施例:
<ComboBox Name="SupervisorDropDown" ItemsSource="{Binding Path=Supervisors}" DisplayMemberPath="sgSupervisor"
SelectedValuePath="idSupervisor" SelectedValue="{Binding Path=SelectedSupervisorID}" />
和相关的ViewModel属性:
public ObservableCollection<SupervisorsEntity> Supervisors
{
get
{
return supervisors;
}
}
public int? SelectedSupervisorID
{
get
{
return selectedSupervisorID;
}
set
{
selectedSupervisorID = value;
this.OnPropertyChanged("SelectedSupervisorID");
}
}
任何想法如何停止我的视图null值我的ViewModels中的值?我在想,也许我需要将View的DataContext在关闭之前设置为null,但我不确定如何通过当前绑定的方式来解决此问题。
我遇到同样的问题。将Visual儿童的DataContext设置为null部分解决了它。隐藏视图而不是销毁视图没有任何区别。我仍在寻找完整的解决方案。 – HappyNomad 2010-11-23 19:00:29