2012-12-19 146 views
1

代码visualNode.Nodes.Add给出了NullReferenceException,因为此时节点未启动。以编程方式将子节点添加到xamdatatree节点

private XamDataTreeNode LoadTree(XmlNode dataNode, int index) 
{ 
    XamDataTreeNode visualNode = new XamDataTreeNode(index, null, MakeTextBox(dataNode.Name), false, null); 

    foreach (XmlNode child in dataNode.ChildNodes) 
    { 
     visualNode.Nodes.Add(LoadTree(child, VisualChildrenCount)); 
    } 

    visualNode.IsExpanded = true; 

    return visualNode; 
} 

我一直在使用ItemsSource尝试,但在XamDataTreeNode.ItemsSource保护。如何填写XamDataTree的值?

我能够做到这一点与WPF树控件,但不是与Infragistics树控件。

编辑,我将阐明多一些:

@HighCore:我想用,以及他们如何看的UI元素只能在数据的分析后才能确定。

@D J:当数据结构可以是任何xml结构时,如何绑定数据?

+0

不要在代码中操作UI元素。 UI不是数据。 –

+0

为什么不使用绑定。 –

+0

我需要使用的数据源取决于树中的位置。此外,我需要分析数据并基于它的孩子和其他东西中的数据操作树节点的外观。此外,我尝试使用visualNode.ItemsSource来设置数据源,但它的保护。注意我想要一个类似于xamdatagrid的东西,从来没有得到转换器工作:http://stackoverflow.com/questions/13747485/cannot-apply-cellvaluepresenter-typeconverter-to-xamdatagridcells – MrFox

回答

0

我通过将XamDataTree映射到提供用作内容的标签的树结构来解决此问题。使用标准PropertyChangedNotifier

public class TreeNode : PropertyChangedNotifier 
{ 
    private Label text; 
    private System.Drawing.Image icon; 
    private ObservableCollection<TreeNode> children; 
} 

     <ig:XamDataTree.GlobalNodeLayouts> 
      <ig:NodeLayout 
       Key="Children" 
       DisplayMemberPath="Text" 
       TargetTypeName="Model.TreeNode" 
       > 
      </ig:NodeLayout> 
     </ig:XamDataTree.GlobalNodeLayouts> 
相关问题