WPF C# Treeview HierarchicalDataTemplate Базовая реализация

Я знаю, что было открыто много потоков, и я все их читаю, чтобы лучше понять, как использовать древовидную структуру, и все же я не могу правильно отобразить древовидную структуру, если не совсем.

Мне удается только сделать один уровень дерева, и у меня есть 3 уровня.

Мой вопрос: что не так с моим кодом ниже?

Уровень 1 класс:

public class ProductModel
{
    public decimal? id { get; set; }
    public string product_pn { get; set; }
    public string product_desc { get; set; }
    public BoardTypesModel product_board_type { get; set; }
}

Уровень 2 класс:

public class BoardTypesModel
{
    public decimal? id { get; set; }
    public string board_type { get; set; }
    public string product_family { get; set; }
    public float board_length_inches { get; set; }
    public List<PulseCurrentModel> lsPulseCurrents { get; set; }
}

Уровень 3 класс:

public class PulseCurrentModel
{
    public decimal? id { get; set; }
    public float voltage_setpoint { get; set; }
    public float nominal_current { get; set; }
    public float current_tolerance { get; set; }
    public float nominal_power { get; set; }
    public float power_tolerance { get; set; }
    public string test_type { get; set; }
    public int order_priority { get; set; }
    public decimal? board_type_id { get; set; }
}

В моей модели просмотра у меня есть следующая интересная строка, которая правильно инициализируется при загрузке модели и работает нормально:

    private ObservableCollection<Models.ProductModel> _ocProducts;
    public ObservableCollection<Models.ProductModel> ocProducts
    {
        get { return _ocProducts; }
        set
        {
            _ocProducts = value;
            RaisePropertyChangedEvent("ocProducts");
        }
    }

Наконец, мой xaml древовидный код для визуализации этой наблюдаемой коллекции:

<TreeView DockPanel.Dock="Top" ItemsSource="{Binding ocProducts}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding product_board_type}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding product_pn}" />
                <TextBlock Text=" - " Foreground="Blue" />
                <TextBlock Text="{Binding product_desc}" Foreground="Blue" />
            </StackPanel>
            <HierarchicalDataTemplate.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding lsPulseCurrents}">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding board_type}" />
                        <TextBlock Text=" (" Foreground="Green" />
                        <TextBlock Text="{Binding board_length_inches}" Foreground="Green" />
                        <TextBlock Text=" inches) " Foreground="Green" />
                        <TextBlock Text="{Binding product_family}" Foreground="Green" />
                    </StackPanel>
                    <!--<HierarchicalDataTemplate.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="Voltage : "></TextBlock>
                                <TextBlock Text="{Binding voltage_setpoint}" />
                            </StackPanel>
                        </DataTemplate>
                    </HierarchicalDataTemplate.ItemTemplate>-->
                </HierarchicalDataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

1 ответ

Решение

Скорее всего, потому что ItemsSource на HierarchicalTemplate должен быть коллекцией, но

public BoardTypesModel product_board_type { get; set; }

не является. Я уверен, что окно вывода должно отображать сообщение об ошибке привязки для этого.

Если вы выставите свойство IEnumerable для привязки, я думаю, оно будет работать.

Другие вопросы по тегам