WPF: Treeview Item Root использует другой шаблон, чем дочерние узлы - PullRequest
4 голосов
/ 13 января 2011

В настоящее время я пытаюсь привязать свой бизнес-объект к древовидной структуре в качестве корня.И его коллекционное свойство как у ребенка.[Я хочу добиться этого с помощью BINDING]

Как-то так.

public object MyBusinessObject
{
   private int _number;
   private bool _isSelected;
   private ObservableCollection<AnotherObject> _other = new ObservableCollection<AnotherObject>();


   public int Number { get {return _number;} set {_number = value;}}
   public bool IsSelected{ get {return _isSelected;} set {_isSelected= value;}}
   public ObservableCollection<AnotherObject>  Children { get {return _other;}}

}

Я хочу, чтобы мое древовидное представление отображалось так:

  • "CheckBox bindedto IsSelected "" Текст, привязанный к числу "
    • Список дочерних элементов, привязанных к моим" Children "
    • Список дочерних элементов, привязанных к моим" Children "
    • Список дочерних элементов, привязанных к моим" Children "my "Children"
  • "CheckBox, привязанный к IsSelected" "Text, привязанный к Number"
    • Список потомков, привязанный к моим "Children"
    • Listребенка, привязанного к моим "Детям"
    • Список детей, привязанных к моим "Детям"

Я не знаю, как это сделать в xaml:

  <TreeView x:Name="_tv" ItemsSource="{Binding Path=MyBusinessObject}" >

            <TreeView.Resources>
                <HierarchicalDataTemplate> 
                    <CheckBox Content="{Binding Path=Number} IsChecked="{Binding Path=IsSelected}" />
                </HierarchicalDataTemplate>

                <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
                    <TextBlock Text="{Binding Path=Name}" />
                </HierarchicalDataTemplate>
            </TreeView.Resources>
        </TreeView>

Я знаю, что вышеупомянутое не правильно, но мне было интересно, есть ли способ сделать это правильно.

Спасибо и С уважением,

1 Ответ

6 голосов
/ 13 января 2011

Конечно, вы можете использовать свойство HierarchicalDataTemplate.ItemTemplate, чтобы определить шаблон данных, который будет использоваться для сбора экземпляров AnotherObject.

<TreeView ItemsSource="{Binding SomeCollectionOfObjects}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">

            <!-- This is used for your AnotherObject instances -->
            <HierarchicalDataTemplate.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}" />
                </DataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>

            <!-- This is used for your MyBusinessObject instances -->
            <CheckBox Content="{Binding Number}" IsChecked="{Binding IsSelected}" />

        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...