c# - 如何将树对象绑定到数据网格?
问题描述
我有 2 个不同的类(A 和 B),它们相互链接以形成类似于二叉树的东西,如下所示:
public class A
{
public B instanceB1;
public B instanceB2;
}
public class B
{
public A instanceA;
public int Min;
public int Max;
}
如何绑定这棵树,其中只有“Min”和“Max”的叶子/最后一个节点显示在数据网格中?
谢谢!
解决方案
首先,将所有这些字段设置为属性,以便您可以绑定到它们。然后编写简单的递归方法来遍历树并返回叶子节点的平面列表。我假设“叶子/最后”只是意味着“叶子”。
public class A
{
public B instanceB1 { get; set; }
public B instanceB2 { get; set; }
public IEnumerable<B> EnumerateLeaves
{
get
{
foreach (var child in instanceB1.EnumerateLeaves
.Concat(instanceB2.EnumerateLeaves))
{
yield return child;
}
}
}
}
public class B
{
public A instanceA { get; set; }
public int Min { get; set; }
public int Max { get; set; }
public IEnumerable<B> EnumerateLeaves
{
get
{
if (instanceA == null)
{
yield return this;
}
else
{
foreach (var child in instanceA.EnumerateLeaves)
yield return child;
}
}
}
}
然后绑定到它们:
<DataGrid
ItemsSource="{Binding TreeRootItem.EnumerateLeaves}"
AutoGenerateColumns="False"
>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Min}" Header="Min" />
<DataGridTextColumn Binding="{Binding Max}" Header="Max" />
</DataGrid.Columns>
</DataGrid>
推荐阅读
- android - 如何在android中单击按钮时向JSONObject添加值?
- json - 将 JSON 数据解析为 ORA-40441 时出错:JSON 语法错误
- c# - 如何将 ProcessStartInfo 写入 Linux 的文本文件
- php - 学说获得销量最多的产品
- sql - MongoDB超时查询
- algorithm - 删除左倾红黑树及其不变量
- c# - WebRoot 和 ContentRoot 用于更改 ASP.NET Core 应用程序的“Web 部件”位置的目的?
- swift - 带有日期选择器工具栏的 iOS 14 错误
- javascript - 在 Next JS 中访问 JSON 对象中的数据
- ios - 在 SwiftUI `DatePicker` 中点击日期时如何捕获?