所以看起来我想做的事情应该是直截了当的,但我还没有找到办法做到这一点......
我需要显示一个对象列表,这些对象代表用于输入数据的自定义元素。具体如何显示每个对象取决于对象的参数 - 因此它可以是包含名称,描述和文本框的网格。它可以是带有几个标签和下拉列表的网格。它可以是包含多个子对象的扩展器。它可能是尚未构建的新东西(因此它需要是可扩展的)。现在,我通过为每个对象创建FrameworkElement然后手动将其添加到Grid来填充此列表。
我想切换到将对象保存在ObservableCollection中,然后将该集合绑定到ListBox(或类似的)。这样,当从列表中添加或删除新对象时,UI将相应地自动更新自身。我无法弄清楚的是,有没有办法将它指向我的C#方法,为每个对象创建自定义配置的FrameworkElement,以便在添加新对象时,相应的元素将添加到UI?
答案 0 :(得分:3)
嗯,就想要使用ObservableCollection<T>
和ListBox
控件而言,你是在正确的轨道上。虽然,我冒昧地说你可能只想使用ItemsControl
,因为你可能不关心选择一个特定的项目,而只是显示一个项目的枚举,而ListBox
会允许你实际上选择其中一个项目。
您的问题是您希望列表中的每个项目根据特定条件以不同方式显示。为此,您需要查看DataTemplate
和DataTemplateSelector
类。
基本上,DataTemplate
是一种说法“我希望我的项目看起来像这样。”,而DataTemplateSelector
是一种说法 “我想根据这个标准选择这个特定的DataTemplate。”
以下是有关如何使用DataTemplate
/ DataTemplateSelector
类的一些示例:
答案 1 :(得分:1)
从模型中分离演示文稿总是一个好主意。看起来你走在正确的轨道上。
Foreach对象类型,您应该创建一个DataTemplate,然后使用ItemTemplateSelector为每个对象类型选择正确的模板。
祝你好运