我有一个位于 PopupContainerControl 内的 TreeList。
TreeList 是根据使用表单的上下文动态填充的。这意味着节点列表在运行时更新和修改。
我遇到的问题是 TreeList 只显示了对节点结构的第一次修改,但没有显示任何后续修改。
我正在使用实现 IVirtualTreeListData 的自定义节点类。如下图所示。
public class Node<T> : TreeList.IVirtualTreeListData
{
public Node<T> Parent { get; set; }
public List<Node<T>> Children { get; set; }
public object[] Cells { get; set; }
public T Object { get; set; }
public Node(T t, Node<T> parent, object[] cells)
{
Parent = parent;
Children = new List<Node<T>>();
Cells = cells;
Object = t;
if (this.Parent != null)
this.Parent.Children.Add(this);
}
public Node(Node<T> parent, object[] cells)
{
Parent = parent;
Children = new List<Node<T>>();
Cells = cells;
if (this.Parent != null)
this.Parent.Children.Add(this);
}
public void VirtualTreeGetChildNodes(VirtualTreeGetChildNodesInfo info)
{
info.Children = Children;
}
public void VirtualTreeGetCellValue(VirtualTreeGetCellValueInfo info)
{
info.CellData = Cells[info.Column.AbsoluteIndex];
}
public void VirtualTreeSetCellValue(VirtualTreeSetCellValueInfo info)
{
Cells[info.Column.AbsoluteIndex] = info.NewCellData;
}
}
因此,当我第一次加载表单时,我会进行以下调用。
_rootNode = new Node<MyResource>(null,null)
_treeList.DataSource = _rootNode;
稍后,当资源加载到 TreeList 中时,如下所示:
Node<MyResource> newResourceNode = new Node<MyResource>(_rootNode,new object[]{"New Node"});
treeList.DataSource = _rootNode;
treeList.RefreshDataSource();
treeList.ExpandAll();
这将仅在第一次命中时设置 TreeList 中的资源,但不反映任何后续更改。