C # WPF MVVM TreeViewItem ToggleButton НИКОГДА не появляется - PullRequest
0 голосов
/ 09 октября 2019

Я недавно работал с 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, когда материалдобавил, но я чувствую, что должно быть более элегантное решение.

...