0

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>

最初の注文を機能させるもの。

より高いインデント レベルでは、 PropertyChangedEventHandler が子に対して起動されないため、IsExpanded は常に false です。

これが私のクラスです:

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; }
    ...
}

編集:申し訳ありませんが、修正したコードは機能しています!

4

1 に答える 1

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"); 
        } 
    } 
} 
于 2011-12-19T04:44:39.733 に答える