XAML-код для TREEVIEW - PullRequest
       0

XAML-код для TREEVIEW

0 голосов
/ 14 мая 2011

Ниже приведен код, который я написал для создания иерархии древовидной структуры,

    For Each k As KeyValuePair(Of String, GenreSet) In GenreSetDictionary
        Dim t As New TreeNodeSet
        t.Genre = True
        t.Imagepath = k.Value.IconPath
        t.Namee = k.Key
        Dim pnode As New TreeViewItem
        pnode.DataContext = t
        pnode.Visibility = True
        For Each z As DatabaseDearDataSet.DiskListRow In adpt.GetDataByGenre(t.Namee)
            Dim tt As New TreeNodeSet
            tt.Genre = False
            tt.Imagepath = IconDictionary(z.DiskIcon).IconPath
            tt.Namee = z.DiskName
            Dim cnode As New TreeViewItem
            cnode.DataContext = tt
            pnode.Items.Add(cnode)
        Next
        DisksTreeView1.Items.Add(pnode)
    Next

Ниже приведен код, который я использовал в XAML:

<TreeView Height="211" HorizontalAlignment="Left" Margin="19,15,0,0" Name="TreeView1" VerticalAlignment="Top" Width="346">
    <TreeView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Image Source="{Binding ImagePath}" Width="32" Height="32"/>
                <TextBlock Text="{Binding Namee}" VerticalAlignment="Center" HorizontalAlignment="Center" />
            </StackPanel>
        </DataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

Однако я не смог получитьэту работу, не могли бы вы сказать мне, где мой XAML не работает, пожалуйста.

1 Ответ

1 голос
/ 16 мая 2011

Здесь я вижу несколько незначительных несоответствий: имя элемента управления TreeView (TreeView1 или DisksTreeView1) и свойство ImagePath (или Imagepath, c # чувствительно к регистру переменных).

Но основная причина неправильного поведения заключается в том, что свойство ItemTemplate применяется к свойству ItemsSource, а не к свойству Items.

Вот два возможных способа исправить код:

1) Исправление класса данных, шаблона элемента и привязка к ItemsSource

  • Создайте приватное поле myObservableCollection типа ObservableCollection(Of TreeNodeSet).
  • Добавитьв конструкторе строка DisksTreeView1.ItemsSource = myObservableCollection
  • Измените строку DisksTreeView1.Items.Add(pnode) на строку myObservableCollection.Add(t).
  • Добавьте свойство Disks к классу TreeNodeSet (тип ObservableCollection тоже)
  • В xaml заменить строку на DataTemplate на строку <HierarchicalDataTemplate ItemsSource="{Binding Disks}"
  • Изменить строку pnode.Items.Add(cnode) на строку t.Disks.Add(tt).

2) Использование свойства HeaderTemplate вместо свойства ItemTemplate.

Сначала переместите DataTemplate в ресурсыи добавить ключ.Затем добавьте аналогичный код рядом с каждым TreeViewItem в коде:

    Dim pnode As New TreeViewItem
    pnode.DataContext = t
    pnode.Header = t
    pnode.HeaderTemplate = Resources("someKey") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...