gpt4 book ai didi

c# - WPF TreeView XAML HierarchicalDataTamplate

转载 作者:太空宇宙 更新时间:2023-11-03 12:29:09 24 4
gpt4 key购买 nike

我需要在 TreeView 中显示数据

[XmlRoot("Tables")]
public class TablesXML
{
public TablesXML()
{
StaticTablesGroups = new List<StaticTablesGroup>();
}


[XmlArray("StaticGroups")]
[XmlArrayItem("StaticGroup", typeof(StaticTablesGroup))]
public List<StaticTablesGroup> StaticTablesGroups { get; set; }

}

public class StaticTablesGroup
{
public StaticTablesGroup()
{
GroupTables = new List<GroupTable>();
SubGroups = new List<StaticTablesGroup>();
}

[XmlAttribute("Name")]
public string Name { get; set; }

//[XmlArray("StaticGroup")]
[XmlElement("Table", typeof(GroupTable))]
public List<GroupTable> GroupTables { get; set; }


[XmlElement("StaticGroup")]
public List<StaticTablesGroup> SubGroups { get; set; }
}

public class GroupTable
{

[XmlElement("TableName")]
public string Name { get; set; }
[XmlElement("TableTag")]
public string Tag { get; set; }
}

在 TablesViewModel 中我有一个属性

public List<StaticTablesGroup> TreeData
{
get
{
return _tables.StaticTablesGroups;
}

set
{
_tables.StaticTablesGroups = value;
OnPropertyChanged("TreeData");
}
}

在 XAML 中

<TreeView ItemsSource="{Binding TablesVM.TreeData}" helpers:TreeviewSelectedItemTracker.SelectedItemHolder="{Binding TablesVM, Mode=TwoWay}" >
<TreeView.Resources>
<HierarchicalDataTemplate ItemsSource="{Binding SubGroups}" DataType="{x:Type data:StaticTablesGroup}">
<Label Content="{Binding Name}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type data:GroupTable}">
<Label Content="{Binding Path=Name}"/>
</DataTemplate>
</TreeView.Resources>
</TreeView>

XML 数据

<?xml version="1.0"?>
<Tables>
<StaticGroups>
<StaticGroup Name="StaticGroup1">
<Table>
<TableName>TableName1</TableName>
<TableTag>TableTag1</TableTag>
</Table>
<StaticGroup Name="SubGroup">
<Table>
<TableName>TableName2</TableName>
<TableTag>TableTag2</TableTag>
</Table>
</StaticGroup>
</StaticGroup>
<StaticGroup Name="StaticGroup2">
<Table>
<TableName>TableName3</TableName>
<TableTag>TableTag3</TableTag>
</Table>
</StaticGroup>
</StaticGroups>
</Tables>

TreeView 看起来像:

enter image description here

TreeView 中缺少SubGroup 节点。我应该向 HierarchicalDataTemplate 添加什么以显示任意数量的子组。嵌套子组的数量未知。

最佳答案

这里的问题是 StaticTablesGroup 类有两个不同的子集合。这在 HierarchicalDataTemplate 中并不真正支持,但您可以使用将两个子集合合并为一个的转换器来解决此问题:

public class SourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
StaticTablesGroup stg = value as StaticTablesGroup;
List<object> merged = new List<object>();
if(stg.GroupTables != null)
merged.AddRange(stg.GroupTables);
if(stg.StaticTablesGroups != null)
merged.AddRange(stg.StaticTablesGroups);

return merged;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}

<TreeView x:Name="tv" ItemsSource="{Binding TablesVM.TreeData}">
<TreeView.Resources>
<data:SourceConverter x:Key="conv" />
<HierarchicalDataTemplate ItemsSource="{Binding Path=., Converter={StaticResource conv}}"
DataType="{x:Type data:StaticTablesGroup}">
<Label Content="{Binding Name}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type data:GroupTable}">
<Label Content="{Binding Name}"/>
</DataTemplate>
</TreeView.Resources>
</TreeView>

enter image description here

关于c# - WPF TreeView XAML HierarchicalDataTamplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43501734/

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