我想在 WPF TreeView 中顯示基于此類的分層檔案夾瀏覽器:
Public Class _Folder
Public Property Name As String
Public ReadOnly Property SubFolders As List(Of _Folder) = New List(Of _Folder)()
End Class
加載我的視窗我創建了我的演示資料:
Private Sub Test2_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
Dim lst As New List(Of _Folder)
Dim str As _Folder = New _Folder()
str.Name = "Client 1"
For x = 1 To 10
Dim y As _Folder = New _Folder With {.Name = "Mandant " & x}
str.SubFolders.Add(y)
Next
lst.Add(str)
str = New _Folder()
str.Name = "Client 2"
For x = 1 To 10
Dim y As _Folder = New _Folder With {.Name = "Mandant " & x}
str.SubFolders.Add(y)
Next
lst.Add(str)
tvw.DataContext = lst
End Sub
在 XAML 我有以下 TreeView
<TreeView x:Name="tvw" ItemsSource="{Binding}" HorizontalAlignment="Left" Height="798" Margin="10,50,0,0" VerticalAlignment="Top" Width="600">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type TreeViewItem}" ItemsSource="{Binding}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
但是結果就是這樣,所以沒有

有人可以幫我嗎?
編輯:將 XAML 更改為
<TreeView x:Name="tvw" ItemsSource="{Binding}" HorizontalAlignment="Left" Height="798" Margin="10,50,0,0" VerticalAlignment="Top" Width="600">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:_Folder}" ItemsSource="{Binding Path=Name}">
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
現在結果顯示存在子檔案夾,但沒有顯示子檔案夾名稱:

uj5u.com熱心網友回復:
HierarchicalDataTemplate.DataType應該是您的資料類,即_Folder不是 GUI 物件型別TreeViewItem。
此外,HierarchicalDataTemplate.ItemsSource指定相關節點的子項,因此您需要將該系結更改為{Binding SubFolders}.
uj5u.com熱心網友回復:
解決了它:唯一錯誤的是 XAML 系結。這個對我有用:
<TreeView x:Name="tvw" ItemsSource="{Binding}" HorizontalAlignment="Left" Height="798" Margin="10,50,0,0" VerticalAlignment="Top" Width="600">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:_Folder}" ItemsSource="{Binding Path=SubFolders}">
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
uj5u.com熱心網友回復:
這就是我最終解決的方法:
班上:
Public Class _Folder
Public Property Name As String
Public Property FullPath As String
Public ReadOnly Property SubFolders As List(Of _Folder) = New List(Of _Folder)()
End Class
XAML:
<TreeView x:Name="tvw" ItemsSource="{Binding}" HorizontalAlignment="Left" Height="798" Margin="10,50,0,0" VerticalAlignment="Top" Width="600">
<TreeView.ItemContainerStyle>
<Style>
<Setter Property="TreeViewItem.IsExpanded" Value="True"/>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:_Folder}" ItemsSource="{Binding Path=SubFolders}">
<TextBlock Text="{Binding Path=Name}" ToolTip="{Binding Path=FullPath}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
編碼:
Dim lstFolders As New List(Of _Folder)
Dim RootFolder As New _Folder
For Each f In _items
If f.Contains("\\") Then f = f.Replace("\\", ":")
Dim drive = f.Split(":")(0)
Dim path = f.Split(":")(1)
'If String.IsNullOrEmpty(drive) Then Continue For
RootFolder.Name = drive
Dim charSeparators As Char() = New Char() {System.IO.Path.DirectorySeparatorChar}
Dim pathSplit() As String = path.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries)
Dim currentFolder As _Folder = RootFolder
For Each level In pathSplit
If String.IsNullOrEmpty(level) Then Continue For
Dim foundFolder = (From x In currentFolder.SubFolders Where x.Name = level Select x).FirstOrDefault
If foundFolder Is Nothing Then
foundFolder = New _Folder
foundFolder.Name = level
If f.StartsWith(":") Then 'Netzwerkpfad
foundFolder.FullPath = (f.Substring(0, f.IndexOf(level)) & level).Replace(":", "\\")
Else 'Pfad mit Laufwerksbuchstaben
foundFolder.FullPath = f.Substring(0, f.IndexOf(level)) & level
End If
currentFolder.SubFolders.Add(foundFolder)
End If
currentFolder = foundFolder
Next
Next
lstFolders.Add(RootFolder)
tvw.DataContext = lstFolders
我的串列(字串)看起來像這樣,它只是一堆檔案夾:
c:\temp\freigabe
c:\temp\ftptest
c:\temp\ftptest\testen
c:\temp\in
c:\temp\in - Kopie
c:\temp\in - Kopie\1
c:\temp\in - Kopie\1\yyy
c:\temp\in - Kopie\1\yyy\yyyyy
c:\temp\in - Kopie\2
c:\temp\in2
c:\temp\ipadb
c:\temp\out
c:\temp\out2
c:\temp\Processes2
c:\temp\Processes2\Kassenbelege
c:\temp\Processes2\Kassenbelege\images
c:\temp\Processes2\Posteingang
c:\temp\Processes2\Posteingang\images
c:\temp\Processes2\Rechnungen
c:\temp\Processes2\Rechnungen\images
c:\temp\Processes2\Rechnungen\images\backup
c:\temp\test
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494732.html
