【发布时间】:2010-11-03 09:05:08
【问题描述】:
我有一个在 GroupBox 中显示用户控件的应用程序。为了显示控件,我绑定到主窗体的 ViewModel 中的一个属性,该属性返回一个要显示的 ViewModel。我已经设置了 DataTemplates,以便表单自动知道使用哪个 UserControl/View 来显示每个 ViewModel。
当我显示不同的 UserControl 时,我保持前一个控件的 ViewModel 处于活动状态,但 WPF 会自动丢弃视图。
我遇到的问题是,当视图关闭时,任何两种方式绑定到 ViewModel 中的属性都会立即设置为 null,因此当我再次显示 ViewModel 时,所有值都设置为在 UI 中为 null。
我认为这是因为作为关闭视图的一部分,它会处理并清除它包含的控件中的任何值,并且由于绑定已经到位,它们也会向下传播到 ViewModel。
我的资源中的数据模板
<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");
}
}
关于如何阻止我的视图将我的视图模型中的值归零的任何想法?我在想,也许我需要在 View 关闭之前将其 DataContext 设置为 null,但我不确定如何使用当前绑定的方式来解决这个问题。
【问题讨论】: