我正在為此苦苦掙扎,希望有人可以幫助我解決。我有一個字串陣列,它們是目錄。這是我的陣列的一個示例:
- c:\temp\freigabe
- c:\temp\ftptest
- c:\temp\ftptest\testen
- c:\溫度\輸入
- 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:\溫度\in2
- c:\temp\ipadb
- c:\溫度\輸出
- 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:\溫度\測驗
我想從這個陣列中填充一個 WPF TreeView。TreeView 應該像在資源管理器視圖中一樣顯示檔案夾。
謝謝你。馬可
uj5u.com熱心網友回復:
WPF 圍繞資料系結的想法作業。假設您有一個集合,您應該將 TreeView 系結到專案集合。例如,如果您有:
Class TreeViewItem
Public Property DisplayText As String
End Class
如果你有一個這樣定義的 TreeView:
<TreeView Name="FileListView" ItemsSource="{Binding}" />
然后您可以顯式系結集合,例如
Class MyWindow
Dim _items As New ObservableCollection(Of TreeViewItem)
'...
Public Sub New()
InitializeComponent()
'...
FileListView.DataContext = _items
'...
End Sub
'...
End Class
我認為您可能需要為 TreeView 定義一個專案模板,以便它也知道如何顯示您的專案,這在 xaml 中的 TreeView 定義中是這樣的:
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding}">
<TextBlock Text="{Binding DisplayText}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
在這種情況下,我在 TreeView 上手動設定了 datacontext,但 WPF 中更常見的方法是為整個表單設定一個 datacontext,然后將 treeview 系結到表單級 datacontext 型別的屬性。
uj5u.com熱心網友回復:
如果有人有同樣的問題,這就是我解決它的方法。我在 XAML 中創建了一個 TreeView,如下所示:
<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>
在我創建了一個包含檔案夾的類的代碼中,結構是由樹視圖本身構建的:
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
以下代碼使用我的檔案夾遍歷(字串)串列:
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)
uj5u.com熱心網友回復:
TreeViews 需要一個層次結構,而不是一個平面的專案串列。
就像是
public class Folder
{
public string Name { get; set; }
public List<Folder> SubFolders { get; } = new List<Folder>();
}
您必須為要顯示的每個專案創建它。
然后可以將控制元件的ItemsSource屬性TreeView分配(或系結到)檔案夾項的集合,這將形成樹的根節點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494736.html
