我正在使用带有HierarchicalDataTemplate的TreeView,但无法使IsExpanded属性的工作级别高于第一级。这是我的xaml:
<TreeView>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Text}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
在我的ResourceDictionary中,我有:
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
</Style>
是什么让第一个订单发挥作用。
在较高的缩进级别中,IsExpanded始终为false,因为不会为子级触发PropertyChangedEventHandler。
这是我的班级:
public class ListItem : INotifyPropertyChanged
{
private bool isExpanded;
public bool IsExpanded
{
get { return isExpanded; }
set
{
if (isExpanded != value)
{
isExpanded = value;
SendPropertyChanged("IsExpanded");
}
}
}
private void SendPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection<ListItem> Children { get; set; }
...
}
编辑:我很抱歉,我的更正代码正常运行!
答案 0 :(得分:0)
如果您想自动扩展所有孩子以及目标项目,那么您需要自己向下传播更改,做这样的事情....
public bool IsExpanded
{
get { return isExpanded; }
set
{
if (isExpanded != value)
{
isExpanded = value;
if (isExpanded)
{
foreach(ListItem child in Children)
child.IsExpanded = true;
}
SendPropertyChanged("IsExpanded");
}
}
}