TreeView与嵌套列表

Phi*_*ies 5 c# wpf treeview xaml

我想在树视图中显示一些对象,但到目前为止还是没有成功.

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

对象的接口ICustom:

int Id { get; }
int age { get; }
CustomerType CustomerType { get; }
ObservableCollection<IValue> ListOfValues { get; }
Run Code Online (Sandbox Code Playgroud)

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

String Name { get; }
Run Code Online (Sandbox Code Playgroud)

我的看法:

<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>
Run Code Online (Sandbox Code Playgroud)

问题: 如何在TreeView中显示这些对象?我的方法(参见"我的视图")不起作用.

Eik*_*e B 3

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

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

编辑:

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

我建议你ObservableCollection<ICustomer> ListOfCustomers在你的 中添加一个ViewModel,然后你可以在视图中绑定:

    <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>
Run Code Online (Sandbox Code Playgroud)

我认为这个线程为您的问题提供了更详细的解决方案: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>
Run Code Online (Sandbox Code Playgroud)