Я пытаюсь создать динамически сгенерированный TreeView в проекте WPF с использованием MVVM. Я создал HierarchicalDataTemplate и модель CheckableItem, к которой он будет привязан. У меня есть свойство типа CheckableItem в ViewModel, которое я заполняю при создании ViewModel. Затем XAML использует шаблон для создания TreeView, но ничего не отображается. Мне нужно, чтобы TreeView содержал флажки, и если у меня установлен флажок более высокого уровня, он должен проверить все флажки более низкого уровня. Это должно выглядеть примерно так:
![Example TreeView](https://i.stack.imgur.com/IF81n.png)
Я не уверен, что не так, из-за чего он не отображается.
Класс ChekableItem:
public class CheckableItem
{
public event PropertyChangedEventHandler PropertyChanged;
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged("Name");
}
}
public ObservableCollection<CheckableItem> Children { get; set; }
private Visibility _isChecked;
public Visibility IsChecked
{
get { return _isChecked; }
set
{
_isChecked = value;
OnPropertyChanged("IsChecked");
CheckChildren(value);
}
}
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private void CheckChildren(Visibility parentIsChecked)
{
foreach (CheckableItem child in Children)
{
child.IsChecked = parentIsChecked;
}
}
ViewModel:
private CheckableItem miscellaneousImports;
public CheckableItem MiscellaneousImports
{
get { return miscellaneousImports; }
set
{
miscellaneousImports = value;
OnPropertyChanged("MiscellaneousImports");
}
}
private void LoadCheckableItems()
{
miscellaneousImports = new CheckableItem()
{
Name = "Miscellaneous Imports"
};
miscellaneousImports.Children = new ObservableCollection<CheckableItem>();
miscellaneousImports.Children.Add(new CheckableItem()
{
Name = "GPO Import"
});
}
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
Просмотр XAML:
<Window x:Class="CAVA_IAS.Views.CaImportView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:models="clr-namespace:CAVA_IAS.Models"
mc:Ignorable="d"
Title="CaImportView" SizeToContent="WidthAndHeight">
<Window.Resources>
<HierarchicalDataTemplate DataType="{x:Type models:CheckableItem}" ItemsSource="{Binding
Children}">
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsChecked}"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</HierarchicalDataTemplate>
</Window.Resources>
<StackPanel>
<Label Content="Miscellaneous Imports" HorizontalAlignment="Center" />
<ScrollViewer>
<TreeView ItemsSource="{Binding MiscellaneousImports, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" FontSize="10" Height="450"/>
</ScrollViewer>
</StackPanel>