gpt4 book ai didi

c# - .NET 数据绑定(bind) - 文件夹和项目的递归树的自定义数据源

转载 作者:太空宇宙 更新时间:2023-11-03 19:36:31 25 4
gpt4 key购买 nike

重写:

我可以使用一些其他人的意见、建议和样本来构建可数据绑定(bind)的集合。

集合需要提供可数据绑定(bind)、可编辑 的项目树,但有一个小变化:项目需要是两种类型之一,每种类型提供略有不同的特征。项目的两种类型是 Folder 和 TreeItem。 Folder 包含它自己的项目列表(同样,Folder 或 TreeItem 类型)而 TreeItem 不包含列表。

我目前的方法相当接近,但感觉很笨拙。本质上,我有一个抽象基类 TreeItemBase,它(以一种迂回的方式)继承自 BindableList。然后我有两个具体的派生类型,Folder 和 TreeItem,它们都继承自抽象基类。明显的缺陷是不能包含子项的TreeItem仍然继承自BindingList;所以这取决于一些丑陋的黑客假装它不是一个集合。

BindingList<> 是一个糟糕的选择吗?一些 DataBinding interfaces听起来他们提供了对数据绑定(bind)的更高程度的控制,但我还没有找到一个非常正确的。不过,我的理想是提供一个自定义实现,让我可以控制数据绑定(bind)如何遍历集合,并可以检查每个元素的具体类型以确定它是否包含一个集合,或者它是否是树中的一个终点.

下面是 XML 的快速截取,以帮助可视化我试图表示的内容;在 XSD 中清晰地编写结构和规则代码对我来说很容易——但我只是很难将其转换为 .NET 并支持数据绑定(bind)。

<Items>
<TreeItem xsi:type="Folder" name="Root">
<TreeItem xsi:type="Folder" name="Sub1">
<TreeItem xsi:type="TreeItem" name="Humm"/>
</TreeItem>
<TreeItem xsi:type="TreeItem" name="Bleh"/>
<TreeItem xsi:type="Folder" name="Sub2">
<TreeItem xsi:type="TreeItem" name="Boo!"/>
</TreeItem>
</TreeItem>
</Items>

更新:我一直在研究我的方法并且已经接近我想使用接口(interface)而不是项目的基类来做的事情,但是我遇到了障碍。我遇到的问题包含在 seperate question 中。 .

理想情况下,我想使用抽象基类方法,以便生成的 XML 将 FolderTreeItem 视为复杂类型(无需手动控制序列化),但这是一个可以忽略不计的要求。

最佳答案

也许我的知识深度不足以回答这个问题,但是你不能这样做吗:

有一个接口(interface),以及两个实现该接口(interface)的类。

interface ITreeItem
{
IEnumerable<ITreeItem> GetChildren();
}

class MyFolder : ITreeItem
{
public IEnumerable<ITreeItem> GetChildren()
{
// TODO: Return the list of children
}
}

class MyITreeItem : ITreeItem
{
public IEnumerable<ITreeItem> GetChildren()
{
// TODO: Return the list of children
}
}

然后,如果您的目标是将集合数据绑定(bind)到某个列表,您应该能够使用 IEnumerable 集合来实现。在每次调用数据绑定(bind)集合时,您应该能够检查项目是哪种类型:

foreach (var node in root.GetChildren())
{
if (node is MyFolder)
{
var folder = (MyFolder)node;

// Bind fields from the folder object
}
else if(node is MyTreeItem)
{
var folder = (MyTreeItem)node;

// Bind fields from the tree item object
}
}

当我将一个列表嵌套在另一个列表中时,我做了类似(我认为)的事情。为了显示数据,我设置了嵌套的 ListView 控件。

抱歉,如果这不是您要找的,但希望对您有所帮助!

关于c# - .NET 数据绑定(bind) - 文件夹和项目的递归树的自定义数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1266902/

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