gpt4 book ai didi

c# - 带有嵌套列表的 TreeView

转载 作者:太空狗 更新时间:2023-10-29 23:12:38 25 4
gpt4 key购买 nike

我想在 TreeView 中显示一些对象,但不幸的是到目前为止没有成功。

我有一个 ObservableCollection <ICustom>对象:Settings.ListOfCustomers

对象的接口(interface)ICustom :

int Id { get; }
int age { get; }
CustomerType CustomerType { get; }
ObservableCollection<IValue> ListOfValues { get; }

ObservableCollection<IValue> ListOfValues还有一些属性,例如:

String Name { get; }

我的看法:

<TreeView ItemsSource="{Binding ListOfCustomers, UpdateSourceTrigger=PropertyChanged}">

<TreeView.Resources>

<HierarchicalDataTemplate DataType="{x:Type customerConfig:ICustomer}">
<TextBlock Text="{Binding Id}"/>
</HierarchicalDataTemplate>

<HierarchicalDataTemplate DataType="{x:Type valueConfig:IValue}" ItemsSource="{Binding ListOfValues}">
<StackPanel>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</HierarchicalDataTemplate>

</TreeView.Resources>


</TreeView>

问题:如何在 TreeView 中显示这些对象?我的方法(见“我的观点”)不起作用。

最佳答案

问题 1:ObservableCollections优点是,对 View 的所有通知都是自动完成的。所以你不必担心 NotifyPropertyChanged从集合中添加/删除对象的事件。

问题 2:您的 ViewModel是你的 DataContext ?我没看到哪里有属性ObservableCollection<ICustomer> ?您能否提供有关此类中关系的更多详细信息?

编辑:

根据mm8的回答,x:Type属性应该是具体类型。所以代码应该是这样的:

我建议你有一个 ObservableCollection<ICustomer> ListOfCustomers在你的ViewModel , 然后你可以在 View 中绑定(bind):

    <TreeView ItemsSource="{Binding ListOfCustomers}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type Customer}">
<TextBlock Text="{Binding Id}"/>
</HierarchicalDataTemplate>

<HierarchicalDataTemplate DataType="{x:Type modSettings:Value}"
ItemsSource="{Binding ListOfValues}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>

我认为此线程为您的问题提供了更详细的解决方案:Implement WPF treeview with different Parent Nodes a well as different child nodes?

编辑2:

我稍微更改了我的代码,以满足您的要求。这应该显示所有节点:

<TreeView ItemsSource="{Binding ListOfCustomers}" >
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=ListOfValues}" DataType="{x:Type Customer}">
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type modSettings:Value}">
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
<TextBlock Text="{Binding Path=Id}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>

关于c# - 带有嵌套列表的 TreeView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45993348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com