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中显示这些对象?我的方法(参见"我的视图")不起作用.
对于问题 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)
| 归档时间: |
|
| 查看次数: |
624 次 |
| 最近记录: |