IsExpanded работает только на первом уровне TreeView - PullRequest
0 голосов
/ 18 декабря 2011

Я использую TreeView с HierarchicalDataTemplate, но не могу заставить свойство 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 всегда ложно, потому что 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 голосов
/ 19 декабря 2011

Если вы хотите автоматически расширить все дочерние элементы, а также целевой элемент, вам нужно распространить изменения вниз самостоятельно, сделать что-то вроде этого ...

public bool IsExpanded 
{ 
    get { return isExpanded; } 

    set 
    { 
        if (isExpanded != value) 
        { 
            isExpanded = value; 
            if (isExpanded)
            {
                foreach(ListItem child in Children)
                    child.IsExpanded = true;
            }
            SendPropertyChanged("IsExpanded"); 
        } 
    } 
} 
...