[英]Get item of recursive observablecollection
我有一个带有 observablecollection 的 TreeITem 类。
/// <summary>
/// Item class to generate a tree view of the queues and topics from the service bus.
/// </summary>
public class TreeItem
{
/// <summary>
/// The whole namespace tree
/// </summary>
public static ObservableCollection<TreeItem> Tree { get; set; }
//TreeItem properties
public string Name { get; set; }
public ObservableCollection<TreeItem> Items { get; set; }
.........
如果我创建一个树结构,我会执行以下操作:
//Get queues and topics
TreeItem namespaceTree = new TreeItem() { Name = namespaceManager.Address.ToString() };
TreeItem queuesTree = GetQueues(namespaceManager.GetQueues());
//Get queues and topics
TreeItem namespaceTree = new TreeItem() { Name = namespaceManager.Address.ToString() };
TreeItem queuesTree = GetQueues(namespaceManager.GetQueues());
TreeItem topicsTree = GetTopics(namespaceManager.GetTopics());
//Generate the topic structure.
namespaceTree.Items.Add(queuesTree);
namespaceTree.Items.Add(topicsTree);
Tree.Add(namespaceTree);
如果我将树绑定到树视图,一切正常,但是当我想从树中获取元素时,我遇到了问题。 例如,我试图从树中获取一个特殊主题,但它不起作用。 我用下面的代码试了一下:
private TreeItem GetTopicFromTree(ObservableCollection<TreeItem> tree)
{
TreeItem treeItem = null;
foreach(var item in tree)
{
if (!item.Name.Equals("topicx"))
GetTopicFromTree(item.Items);
else
treeItem = item;
}
return treeItem;
}
但是通过递归它没有用。
这是你想要做的吗?
private TreeItem GetTopicFromTree(ObservableCollection<TreeItem> tree)
{
foreach(var item in tree.Items)
{
var found = GetTopicFromTree(item);
if (found != null)
return found;
}
return null;
}
但是 TreeItem 不是ObservableCollection
,因此您需要GetTopicFromTree
方法来处理TreeItem
。
private TreeItem GetTopicFromTree(TreeItem tree)
{
if (Name.Equals("topicx"))
return this;
foreach(var item in tree.Items)
{
var found = GetTopicFromTree(item);
if (found != null)
return found;
}
return null;
}
或者,也许是触摸清洁器
private TreeItem FindTopic(TreeItem node, string name)
{
if (node.Name == name)
return node;
foreach (var child in node.Items)
{
var found = FindTopic(child, name);
if (found != null)
return found;
}
return null;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.