自定义用于显示ObservableCollection内容的FrameworkElements

时间:2013-07-09 20:55:47

标签: c# wpf

所以看起来我想做的事情应该是直截了当的,但我还没有找到办法做到这一点......

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

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

2 个答案:

答案 0 :(得分:3)

嗯,就想要使用ObservableCollection<T>ListBox控件而言,你是在正确的轨道上。虽然,我冒昧地说你可能只想使用ItemsControl,因为你可能不关心选择一个特定的项目,而只是显示一个项目的枚举,而ListBox会允许你实际上选择其中一个项目。

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

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


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

答案 1 :(得分:1)

从模型中分离演示文稿总是一个好主意。看起来你走在正确的轨道上。

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

祝你好运