【问题标题】:Adding custom class elements into TreeView将自定义类元素添加到 TreeView
【发布时间】:2016-11-07 17:22:01
【问题描述】:

我将尝试解释我一直在尝试做的事情,但我无法尽可能简单地弄清楚(例如使用汽车)。假设我的 MainWindw.xaml.cs 代码中有一个自定义类(也可能包含三个以上的元素):

    public class Car {
        public string car_name { get; set; }
        public string car_brand { get; set; }
        public int car_year { get; set; }
    }

现在我想将 Car 实现为 TreeView,它应该看起来像这样:

    ->car_name
       ->car_brand
       ->car_year

所以当我点击 car_name 时,它​​会展开并且 car_brand 和 car_year 是它的子元素。我还希望能够添加其中的多个,例如:

    ->car_name
       ->car_brand
       ->car_year
    ->car_name
       ->car_brand
       ->car_year
    ->car_name
       ->car_brand
       ->car_year

我无法弄清楚使用 C# 将我的自定义类实现到 TreeView 中的正确方法是什么。我尝试了许多“绑定”的变体。网上有很多例子,但是我没有遇到过真正简化的例子,或者我看这个太久了,有点抓狂,看不透。

    <TreeView Name="myTree">
        <TreeViewItem Header="{Binding car_name}">
            <TreeViewItem Header="{Binding car_brand}"/>
            <TreeViewItem Header="{Binding car_year}"/>
        </TreeViewItem>
    </TreeView>

当我想添加一辆新车时,我认为 C# 应该是这样的:

    Car mycar1 = new Car({car_name="my car name", car_brand="my car brand", car_year=1999});
    myTree.Add(mycar1);

如果有人能简单地向我解释这一点,我会很高兴的。我刚开始使用 VisualStudio 学习 C# 和 XAML,这真的让我很烦恼。

【问题讨论】:

    标签: c# wpf xaml treeview


    【解决方案1】:

    不用Binding也可以这样简单地完成:

               Car mycar1 = new Car("my car name", "my car brand", 1999);
               TreeViewItem node = new TreeViewItem() { Header = mycar1.car_name};
               node.Items.Add(new TreeViewItem() { Header = mycar1.car_brand });
               node.Items.Add(new TreeViewItem() { Header = mycar1.car_year });
               myTree.Items.Add(node);
    

    每个节点都是汽车名称,在节点上添加品牌和年份,然后像上面那样将整个节点添加到树中。 请注意,这是我使用的 Car 类:

    public class Car
    {
        public string car_name { get; set; }
        public string car_brand { get; set; }
        public int car_year { get; set; }
        public Car(string name, string brand, int year)
        {
            car_brand = brand;
            car_name = name;
            car_year = year;
        }
    }
    

    【讨论】:

    • 效果很好!是否还有一种简单的方法可以获取您单击的节点?例如,在 myTree 中使用 MouseLeftButtonUp="myTree_MouseLeftButtonUp" 函数?
    • 我不确定我是否完全理解您的问题,当用户点击汽车的名称时,您想知道点击的是哪一辆?
    • 是的,例如,如果用户点击第一辆车,该车的图片会显示在应用程序网格的某处,如果用户点击 TreeView 中的另一辆车,图片显示那辆车。
    • 可以添加node.MouseLeftButtonUp += node_MouseLeftButtonUp;和 private void node_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { //在这里做你想做的事情 }
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2015-11-14
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    相关资源
    最近更新 更多