1

WPF TreeViewコントロールで遊んでいて、奇妙な問題に直面しています。TreeViewアイテムをプログラムで追加すると、すべて正しく機能しますが、バインディングを介してアイテムを追加した場合、ヘッダーにギャップのあるアイテムがあります。

ここに画像の説明を入力してください

さらに、このギャップは、TreeItemの行の1つの「機密」部分にすぎません。テキストをクリックしてアイテムを選択できません。ギャップ領域をクリックした場合にのみ選択できます。これが私のコードです:

namespace WPFTreeViewExperience
{
    /// <summary>
    /// Data item interface
    /// </summary>
    public interface IMyTree
    {
        string Title { get; set; }
        List<IMyTree> Items { get; set; }
    }

    /// <summary>
    /// Hierarchical data model
    /// </summary>
    public class MyTreeLevel : IMyTree
    {
        public string Title { get; set; }

        public List<IMyTree> Items { get; set; }

        public MyTreeLevel(string Title, params MyTreeLevel[] Items)
        {
            this.Title = Title;

            this.Items = new List<IMyTree>();

            foreach (MyTreeLevel item in Items)
            {
                this.Items.Add(item);
            }
        }
    }

    /// <summary>
    /// Viewmodel
    /// </summary>
    public class MyTreeViewModel : INotifyPropertyChanged
    {

        private void NotifyChanges(string PropName)
        {
            if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(PropName));
        }
    }

    private List<MyTreeLevel> _Tree;

    public List<MyTreeLevel> MyTree
    {
        get
        {
            return _Tree;
        }

        set
        {
            _Tree = value;
            NotifyChanges("MyTree");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public MyTreeViewModel()
    {
        List<MyTreeLevel> simpleTree = new List<MyTreeLevel>();

            simpleTree.Add(new MyTreeLevel("1-0", new MyTreeLevel("1-1"),
                                          new MyTreeLevel("1-2",
                                                                new MyTreeLevel("1-2-1"),
                                                                new MyTreeLevel("1-2-2")
                                                                ),
                                          new MyTreeLevel("1-3")));

            simpleTree.Add(new MyTreeLevel("2-0", new MyTreeLevel("2-1"),
                                          new MyTreeLevel("2-2",
                                                                new MyTreeLevel("2-2-1"),
                                                                new MyTreeLevel("2-2-2"),
                                          new MyTreeLevel("2-3"))));

            MyTree = simpleTree;
        }
    }

    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
        public partial class MainWindow : Window
        {        
            public MainWindow()
            {
                InitializeComponent();

                TreeExample.DataContext = new MyTreeViewModel();
            }
        }
    }

と私のXAMLコード:

<Window x:Class="WPFTreeViewExperience.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WPFTreeViewExperience"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TreeView Name="TreeExample" ItemsSource="{Binding MyTree}">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Items}" DataType="{x:Type local:MyTreeLevel}">
                    <TreeViewItem Header="{Binding Title}"/>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>        
    </Grid>
</Window>

バインディングの何が問題になっていますか?

4

1 に答える 1

2

ItemTemplateは次のようなものになると思います。

  <HierarchicalDataTemplate ItemsSource="{Binding Items}" DataType="{x:Type local:MyTreeLevel}">
        <Grid>
            <TextBlock Margin="0" Text="{Binding Path=Title}" />
        </Grid>
    </HierarchicalDataTemplate>
于 2013-01-18T14:51:02.683 に答える