如何使用不同UI控件的子节点创建TreeView

时间:2014-07-14 14:39:07

标签: c# wpf mvvm combobox treeview

在我的程序中,我有一个treeView我想要允许comboBoxestextBlocks的子节点。我的treeView及其节点以MVVM样式创建。我知道如何创建textBlock子节点,但从未创建任何其他UI工具的子节点。

我的treeview's xaml:

TreeView ItemsSource="{Binding UserControl_DataModel.TreeViewViewModel.ObservableCollection<TreeViewDataModel>}" DisplayMemberPath="DisplayName.Value".../>

这是创建新节点并添加到TreeView(TreeViewViewModel)的地方:

private TreeViewDataModel createNewNode(string nodeName)
{
    var newNode = new TreeViewDataModel ()
    {
        DisplayName = nodeName
    };

    newNode.Children.Add(new TreeViewDataModel () { DisplayName = nodeName});

    return newNode;
}

public void addNewLocNode(string nodeName)
{
    TreeObservableCollection.Add(createNewNode(nodeName));
}

如何创建ComboBoxes的子节点,同时仍允许textblock个孩子?这让我感到困惑,因为我没有看到代码的任何部分,它们指定了孩子们成为什么UI工具。如果您需要查看更多代码,请与我们联系。

Previous question如果您需要引用它,请约定treeView。)

更新

为了清楚起见,这就是我的treeView节点的外观:

enter image description here

当我尝试这样的事情时:

<HierarchicalDataTemplate DataType="{x:Type Data:Node}" ItemsSource="{Binding Teams}">
    <StackPanel>
        <TextBlock Text="{Binding IndividualProperty}" />
        <ComboBox ItemsSource="{Binding CollectionProperty}" />
    </StackPanel>
</HierarchicalDataTemplate>

我反而得到了这个设置(就像树的每个项目都带有TextBlockComboBox。也许还有另外一个选项StackPanel?):

enter image description here

请注意,comboBox不是textBlock节点的子节点,但它更像是与textBlock节点位于同一级别。

1 个答案:

答案 0 :(得分:0)

ComboBox是一个集合控件。因此,您需要在&#39;节点中使用集合属性。要绑定到ComboBox.ItemsSource的对象。虽然“节点”中的个人财产属于“节点”。对象可能需要HierarchicalDataTemplate,有点像这样:

<HierarchicalDataTemplate DataType="{x:Type Data:Node}" ItemsSource="{Binding Teams}">
    <TextBlock Text="{Binding IndividualProperty}" />
</HierarchicalDataTemplate>

你还需要一个这样的:

<HierarchicalDataTemplate DataType="{x:Type Data:Node}" ItemsSource="{Binding Teams}">
    <ComboBox ItemsSource="{Binding CollectionProperty}" />
</HierarchicalDataTemplate>

或者也许是这样:

<HierarchicalDataTemplate DataType="{x:Type Data:Node}" ItemsSource="{Binding Teams}">
    <StackPanel>
        <TextBlock Text="{Binding IndividualProperty}" />
        <ComboBox ItemsSource="{Binding CollectionProperty}" />
    </StackPanel>
</HierarchicalDataTemplate>