Я недавно работал с TreeView
для представления файлов на SFTP-сервере. То, как все загружается, сначала получает каталоги и добавляет их в TreeView
. После этого он просматривает каталоги и затем заполняет файлы.
Модель выглядит следующим образом.
public class FileData : ViewModelBase
{
private string _Display = "";
public string Display
{
get
{
return _Display;
}
set
{
_Display = value;
OnPropertyChanged(new PropertyChangedEventArgs("Display"));
}
}
}
public class AlbumData : ViewModelBase
{
public AlbumData(string albumName, List<FileData> albumFileList)
{
if (string.IsNullOrEmpty(albumName) || albumFileList == null)
{
return;
}
AlbumName = albumName;
AlbumFiles = albumFileList;
}
public string AlbumName { get; set; } = "";
private List<FileData> _AlbumFiles = new List<FileData>();
public List<FileData> AlbumFiles
{
get
{
return _AlbumFiles;
}
set
{
_AlbumFiles = value;
OnPropertyChanged(new PropertyChangedEventArgs("AlbumFiles"));
}
}
}
Затем в XAML:
<TreeView x:Name="ftpFilesTreeView" ItemsSource="{Binding ServerAlbums}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding AlbumFiles}" DataType="{x:Type local:AlbumData}">
<TextBlock Text="{Binding AlbumName}"/>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:FileData}">
<TextBlock Text="{Binding Display}"/>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
ЗатемУ меня есть ObservableCollection
с данными для TreeView
.
private ObservableCollection<AlbumData> _ServerAlbums = new ObservableCollection<AlbumData>();
public ObservableCollection<AlbumData> ServerAlbums
{
get { return _ServerAlbums; }
set
{
_ServerAlbums = value;
OnPropertyChanged(new PropertyChangedEventArgs("ServerAlbums"));
}
}
Итак, моя большая проблема в том, что ToggleButton
не появляется после добавления элементов в TreeView
.
Я пытался использовать Blend для создания пользовательского TreeViewItem
и использовать свойство HasItems
. Я думаю, что проблема в том, что HasItems
не обновляется, так как объекты добавляются в мою коллекцию ServerAlbums[X].AlbumFiles
.
Я думал, что могу сделать грубый хак и просто вручную установить HasItems
, когда материалдобавил, но я чувствую, что должно быть более элегантное решение.