【发布时间】:2018-02-02 15:04:39
【问题描述】:
我有一个包含 TPDItem 类型项目的 TreeView,每个 TPDItem 都有一个 ObservableCollection 的 TPDItems,它们以下列方式显示: TPDItem Hierarchy
级别显示哪些项是哪些子项的父项,1.1、1.2 和 1.3 是级别 1 项的子项。
如果我勾选导出复选框,我想设置该项目的导出值,并且它是子项(并且是子项)递归。 这是我的 TPDItem 类:
public class TPDItem : INotifyPropertyChanged
{
public List<string> LevelArr { get; }
public string Level { get; }
public string _12NC { get; }
private string pn;
public string Description { get; }
private ObservableCollection<TPDItem> children = new ObservableCollection<TPDItem>();
private bool isExported = true;
public bool IsExported
{
get { return isExported; }
set
{
SetExported(value);
OnPropertyChanged("IsExported");
}
}
public string PN
{
get { return pn; }
set { pn = value; }
}
public ObservableCollection<TPDItem> Children
{
get
{
return children;
}
}
public void SetExported(bool exported)
{
isExported = exported;
foreach (TPDItem item in Children)
{
item.SetExported(exported);
}
}
}
这是我相关的 TreeView XAML 代码:
<TreeView ItemsSource="{Binding Hierarchy}" Margin="10,0,10,0" Height="243" >
<TreeView.Resources>
<HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="{x:Type models:TPDItem}">
<Grid >
<TextBlock Text="{Binding Level}"/>
<TextBlock Text="{Binding _12NC}" Margin="{Binding Margins._12NC}"/>
<TextBlock Text="{Binding PN}" Margin="{Binding Margins.PN}"/>
<TextBlock Text="{Binding Description}" Margin="{Binding Margins.Description}"/>
<CheckBox Content="Export" Margin="{Binding Margins.CheckBox}" IsChecked="{Binding IsExported, Mode=TwoWay}" />
</Grid>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
但是,只有在该子级尚未展开时,子级中的复选框才会更新为其父级的值。创建树后,如果我取消选中顶部项目的复选框,则整个列表都会取消选中。但是,如果我展开和关闭一个子项,然后勾选其父项的复选框,则它们不会在视觉上得到更新。
如果您需要更多信息,请告诉我。
【问题讨论】: