绑定字符串列表显示包含类名而不是字符串

时间:2017-06-02 11:37:40

标签: wpf data-binding

我的问题如下:

我有一个具有ObservableCollection字符串的类,它由选定的子元素填充。

这些应该列在ListBox中。

但是没有列出字符串,而是显示了FilterList中的对象类型。

<ListBox Grid.Row="2" Grid.Column="0"
             ItemsSource="{Binding FilterList}">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel IsItemsHost="True"
                            Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding ListOfActiveFilters}">
                <!--<ContentPresenter Content="{Binding ListOfActiveFilters.}"/>-->
                    <TextBlock Text="{Binding}" />
            </HierarchicalDataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

Filter List包含将ListOfActiveFilters作为Property的类。 我认为它会按照我展示的方式工作,但事实并非如此。 因为这也是我看到其他人这样做的方式。

如果我使用带有单个字符串属性的Class作为Collection的类型而不是我现在拥有的字符串集合,我认为它会起作用。

我真的没有看到创建一个包含字符串属性的类的重点,以便我可以将ContentPresenter或TextBox绑定到该属性。

我做错了什么?我对这个话题很新。

1 个答案:

答案 0 :(得分:1)

一个ListBox只能在一个ListOfActiveFilters个集合中显示过滤器。您可以使用嵌套的ItemsControls来全部显示它们:

<ItemsControl ItemsSource="{Binding FilterList}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ListBox ItemsSource="{Binding ListOfActiveFilters}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding}" />
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

另一个选项是修改数据模型并将所有字符串放在一个集合中。然后,您可以将ItemsSource的{​​{1}}属性直接绑定到此属性。但是ListBox本身没有层次数据的概念。