1

所以看起来我想做的事情应该很简单,但我一直无法找到一种方法来做到这一点......

我需要显示代表用于输入数据的自定义元素的对象列表。每个对象的确切显示方式取决于对象的参数——因此它可能是一个包含名称、描述和文本框的网格。它可以是一个带有几个标签和一个下拉列表的网格。它可能是一个包含多个子对象的扩展器。它可能是尚未构建的新东西(因此它需要可扩展)。现在,我通过为每个对象创建 FrameworkElement 然后手动将其添加到 Grid 来填充此列表。

我想切换到将我的对象保存在 ObservableCollection 中,然后将该集合绑定到 ListBox(或类似的)。这样,当从列表中添加或删除新对象时,UI 会自动相应地更新自身。我想不通的是,有没有办法将它指向我的 C# 方法来为每个对象创建自定义配置的 FrameworkElement,以便在添加新对象时将适当的元素添加到 UI 中?

4

2 回答 2

3

好吧,就想要使用一个ObservableCollection<T>和一个ListBox控件而言,您走在正确的轨道上。不过,我敢说您可能只想使用 an ,ItemsControl因为您可能不关心选择特定项目,而只是显示项目的枚举,并且ListBox允许您实际选择其中一个项目。

您的问题是您希望列表中的每个项目根据某些条件以不同方式显示。为此,您需要查看DataTemplateDataTemplateSelector类。

基本上,aDataTemplate是一种表示“我希望我的项目看起来像这样”的方式。, aDataTemplateSelector是一种说法,“我想根据这个标准选择这个特定的 DataTemplate”。


以下是一些关于如何使用DataTemplate/DataTemplateSelector类的示例:

于 2013-07-09T21:05:18.563 回答
1

将演示文稿与模型分开总是一个好主意。看来您走在正确的轨道上。

对于每个对象类型,您应该创建一个 DataTemplate,然后使用 ItemTemplateSelector 为每个对象类型选择正确的模板。

祝你好运

于 2013-07-09T21:15:14.390 回答