【问题标题】:Not able to make bindings in treeview无法在树视图中进行绑定
【发布时间】:2018-01-06 03:17:59
【问题描述】:

我正在尝试使用 itemtemplate 制作自定义树视图,因此我可以在树视图中显示 headertext + 项目的类型。

我的灵感来自这个答案; https://stackoverflow.com/a/33119107/9156219

所以,我的问题是我无法使 Itembindings 工作。 这是我的代码;

XAML:

<TreeView x:Name="treeView" ItemsSource="{Binding treeList}" Grid.Column="0" IsVisibleChanged="treeView_IsVisibleChanged" SelectedItemChanged="treeView_SelectedItemChanged">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate >
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Type}" Margin="2,2,2,2" Background="LightBlue" FontSize='8'/>
                <TextBlock Text="{Binding SystemName}" />
            </StackPanel>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

C#

    public class CustomTreeViewItem : TreeViewItem
    {
        public String SystemName { get; set; }
        public String Type { get; set; }
        public String ParentItem { get; set; }
        public String Path { get; set; }
    }

    public List<CustomTreeViewItem> treeList = new List<CustomTreeViewItem>();

    public void SetRootNode()
    {
        int itmNumber = datSet.Rows.Count;

        for (int i = 0; i < itmNumber; i++)
        {
            treeList.Add(new CustomTreeViewItem
            {
                SystemName = (string)datSet.Rows[i].ItemArray[1].ToString(),
                Type = (string)datSet.Rows[i].ItemArray[2].ToString(),
                ParentItem = (string)datSet.Rows[i].ItemArray[3].ToString(),
                Path = (string)datSet.Rows[i].ItemArray[4].ToString(),
            });
            treeList[i].Header = treeList[i].SystemName;
        }


        foreach (CustomTreeViewItem item in treeList.Where(treeList => treeList.ParentItem == ""))
        {
            treeView.Items.Add(item);
        }

        foreach (CustomTreeViewItem item in treeList.Where(treeList => treeList.ParentItem != "").Where(treeList => treeList.Type != "Signal"))
        {
            var test = treeList.Find(treeList => treeList.SystemName == item.ParentItem);
            test.Items.Add(item);
        }

    }

SetRootNode() 在程序开始时被调用。 datSet 正在填充 OleDBDataAdapter。

在树形视图中,仅显示 SystemName 而不是类型。我做错了什么?

提前谢谢你!

【问题讨论】:

    标签: c# wpf xaml treeview


    【解决方案1】:

    您正在尝试创建一个 TreeView,其 TreeViewItems 再次包含 TreeViewItems,如果您删除模型的继承,它会起作用:

    这样做:

    public class CustomTreeViewItem
    

    而不是

    public class CustomTreeViewItem : TreeViewItem
    

    这足以满足您的需求吗?

    【讨论】:

    • 是的,它正在工作!但是,现在我无法添加子项。以下段落无法执行,因为 CustomTreeViewItem 不再继承自 TreeViewItem。 ` foreach(treeList.Where(treeList => treeList.ParentItem != "").Where(treeList => treeList.Type != "Signal")) 中的 CustomTreeViewItem 项 { var test = treeList.Find(treeList => treeList. SystemName == item.ParentItem); test.Items.Add(item); }`
    • 您需要寻找一种方法来使用适当的视图模型支持您的树视图,而不是试图侵入 TreeViewItems。这可能听起来像是一种随意的评论,但除非人们正确地接受 MVVM,否则 TreeView 的麻烦将无止境。例如,阅读link
    猜你喜欢
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    相关资源
    最近更新 更多