1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

WPFで再帰的なTreeViewを表示する

Posted at

始めに

WPF初心者がMVVMを用いたアプリケーションを作る過程で、自分がはまった内容を備忘録として残そうと思います。
今回はWindowsのフォルダみたいに、TreeViewをMVVMでどうやってバインドすれば良いのかはまったので記載します。
ちなみにMVVMフレームワークはCaliburn.Microを使っています。(PrismとかLivetとかの方良いか悩み中)

XAML側

<TreeView Name="treeview" ItemsSource="{Binding TreeViewItems}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate DataType="{x:Type local:TreeItem}" ItemsSource="{Binding Children}">
            <TextBlock Text="{Binding Name}"/>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

合計3つBindingしないといけない。TreeViewにBindingする必要があるのに気づかず結構はまった。

ViewModel側

public class MainWindowViewModel : PropertyChangedBase
{
    private ObservableCollection<TreeItem> _treeViewItems = new ObservableCollection<TreeItem>();
    public ObservableCollection<TreeItem> TreeViewItems
    {
        get { return _treeViewItems; }
        set
        {
            _treeViewItems = value;
            NotifyOfPropertyChange(() => TreeViewItems);
        }
    }
}

public class TreeItem : PropertyChangedBase
{
    private String _name = "";
    public String Name 
    {
        get { return _name; }
        set
        {
            _name = value;
            NotifyOfPropertyChange(() => Name);
        }
    }

    private ObservableCollection<TreeItem> _children = new ObservableCollection<TreeItem>();
    public ObservableCollection<TreeItem> Children 
    {
        get { return _children; }
        set
        {
            _children = value;
            NotifyOfPropertyChange(() => Children);
        }
    }
…(省略)…
}

用意するクラスは、2つ

  • TreeViewにBindingするTreeViewItems
  • TreeViewItemsにAddするTreeItem

TreeItemに表示用のNameと、子要素のChildrenを用意する。
ChildrenにTreeItemをAddすることで階層表示ができる。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?