IsExpanded仅适用于TreeView的第一级

时间:2011-12-18 18:45:03

标签: c# wpf xaml treeviewitem hierarchicaldatatemplate

我正在使用带有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; }
    ...
}

编辑:我很抱歉,我的更正代码正常运行!

1 个答案:

答案 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"); 
        } 
    } 
}