1

我有一个看起来像这样的集合:

ObservableDictionary<string, ObservableDictionary<string, SystemStatusItem>> ObservableColoServerStatus

我正在创建一个我想绑定的用户控件,如下所示:

  • 外部字典中的每个键(字符串)键都应动态创建一个扩展器。
  • 在该扩展器内部是一个 ListView/DataGrid/一些用于显示信息集合的控件
  • ListView/DataGrid 中的每一行或任何内容都将由(字符串)键和内部字典的(对象)值的属性的组合组成。

理想情况下,它应该看起来和操作类似于 TreeView,但是扩展器已通过我们的 UI 广泛使用,因此我想坚持这一点以保持一致性。

我是 WPF 的新手,之前做过一些基本的数据绑定,但是这种嵌套关系的性质让我很难理解

4

1 回答 1

1

好的,首先让我们假设您 ObservableDictionary 是具有 Key 属性和 Value 属性的项目的集合。您可以使用数据模板在 wpf 中完成您想要的操作,请查看此代码,尝试以这种方式进行操作:

<ListBox ItemsSource="{Binding ObservableColoServerStatus}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Expander Header="{Binding Key}">
                    <ListBox ItemsSource="{Binding Value}">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="{Binding Key}"/>
                                    <TextBlock Text="{Binding Value}"/>
                                </StackPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                </Expander>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

它是一个列表框,将您的 ObservableDictionary 作为 ItemsSource,然后在项目模板属性中设置将用于表示所有项目的模板。在这种情况下,扩展器在标题中具有一个列表框,该列表框从第一个字典的值中获取元素,然后您再次设置了模板。这是相似的。希望对你有帮助...

于 2012-10-11T20:08:58.573 回答