2

TreeViewWPF データバインディング機能を使用して、オブジェクト (カテゴリ) の階層ツリーを表示しようとしています。

Josh Smith によるこのチュートリアルに大まかに従いましたが、効果はありませんTreeView

私の非常に単純なアプリケーションの完全なコードは次のとおりです。

using System.Windows;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {   
            InitializeComponent();
            this.DataContext = CategoriesTreeViewModel.CreateDefault;
        }
    }
}

ViewModel オブジェクトとサンプル データ:

using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;

namespace WpfApplication1
{
    public class Category
    {
        public Category()
        {
            Children = new ObservableCollection<Category>();
        }

        public ObservableCollection<Category> Children
        {
            get;
            set;
        }
        public string Name { get; set; }

    }

    public class CategoriesTreeViewModel
    {
        public ReadOnlyCollection<Category> FirstGeneration;

        private static IEnumerable<Category> SomeCategories
        {
            get
            {
                var A = new Category() { Name = "A" };
                var B = new Category() { Name = "B" };
                var A1 = new Category() { Name = "A1" };
                var A2 = new Category() { Name = "A2" };
                var B1 = new Category() { Name = "B1" };
                var B2 = new Category() { Name = "B2" };

                A.Children.Add(A1);
                A.Children.Add(A2);
                B.Children.Add(B1);
                B.Children.Add(B2);

                yield return A;
                yield return B;
            }
        }

        public static CategoriesTreeViewModel CreateDefault
        {
            get
            {
                var result = new CategoriesTreeViewModel()
                {
                    FirstGeneration = new ReadOnlyCollection<Category>(SomeCategories.ToList())
                };
                return result;                
            }
        }
    }
}

XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TreeView ItemsSource="{Binding FirstGeneration}" Name="treeView1">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                    <TextBlock Text="{Binding Name}" />
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>
    </Grid>
</Window>

TreeViewコントロールが空白なのはなぜですか?

4

1 に答える 1

5

FirstGeneration プロパティにアクセスする方法がありません。「get」アクセサーのないプロパティは、書き込み専用と見なされます。

public ReadOnlyCollection<Category> FirstGeneration { get; set; }
于 2012-08-28T15:09:23.043 に答える