0

MyItem および MyGroup オブジェクトで構成された CompositeCollection にバインドされた TreeView があります。

クラス定義:

public class MyItem
{
    public string Name { get; set; }

    public MyItem(string name = "")
    {
        Name = name;
    }
}


public class MyGroup
{
    public string Name { get; set; }
    public List<MyGroup> MyGroups = new List<MyGroup>();
    public List<MyItem> MyItems = new List<MyItem>();

    public IList Children
    {
        get
        {
            return new CompositeCollection()
            {
                new CollectionContainer { Collection = MyGroups },
                new CollectionContainer { Collection = MyItems }
            };
        }
    }

    public MyGroup(string name)
    {
        Name = name;
    }
}

XAML:

<TreeView Name="myTreeView">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type local:MyGroup}" ItemsSource="{Binding Children}">
            <TextBlock Text="{Binding Name}" />
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate DataType="{x:Type local:MyItem}">
            <TextBlock Text="{Binding Name}" />
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>

ツリーを設定するためのコード:

var root = new ObservableCollection<MyGroup>();
myTreeView.ItemsSource = root;

MyGroup g1 = new MyGroup("First");
MyGroup g2 = new MyGroup("Second");
MyGroup g3 = new MyGroup("Third");
MyItem i1 = new MyItem("Item1");
MyItem i2 = new MyItem("Item2");
MyItem i3 = new MyItem("Item3");

root.Add(g1);
root.Add(g2);
g2.MyGroups.Add(g3);
g1.MyItems.Add(i1);

問題は、コードを実行するたびに First と Second のみが表示されますが、Second の横に展開矢印が表示されず、展開できないことです。デバッグは、g2 が子として g3 を持っていることを示していますが、TreeView コントロールには存在しません。

どうすれば修正できますか?目的は、できるだけ少ないコードでそれを行うことです。抽象化レイヤーとラッパークラスの負荷を追加しないようにしています...

これらを経て、私の問題を解決しませんでした:

4

1 に答える 1