自定义用于显示ObservableCollection内容的FrameworkElements
本文关键字:FrameworkElements ObservableCollection 用于 显示 自定义 | 更新日期: 2023-09-27 18:21:39
所以我想做的似乎应该很简单,但我一直没能找到方法…
我需要显示一个对象列表,这些对象表示用于输入数据的自定义元素。每个对象的具体显示方式取决于对象的参数,因此它可以是一个包含名称、说明和文本框的网格。它可以是一个带有几个标签和下拉列表的网格。它可以是一个包含多个子对象的扩展器。它可能是尚未构建的新东西(因此它需要是可扩展的)。现在,我正在通过为每个对象创建FrameworkElement,然后手动将其添加到网格来填充此列表。
我想切换到将我的对象保存在ObservableCollection中,然后将该集合绑定到ListBox(或类似的)。这样,当从列表中添加或删除新对象时,UI会相应地自动更新自己。我想不通的是,有没有一种方法可以把它指向我的C#方法,为每个对象创建自定义配置的FrameworkElement,这样当添加新对象时,适当的元素就会添加到UI中?
好吧,您想要使用ObservableCollection<T>
和ListBox
控件是正确的。不过,我冒昧地说,您可能只想使用ItemsControl
,因为您可能不关心选择特定项目,而只关心显示项目的枚举,而ListBox
将允许您实际选择其中一个项目。
您的问题是,您希望列表中的每个项目根据特定条件以不同的方式显示。为此,您需要查看DataTemplate
和DataTemplateSelector
类。
基本上,DataTemplate
是表示"我希望我的项目看起来像这样。"的一种方式,DataTemplateSelector
是表示"我想根据此标准选择此特定数据模板。"
以下是一些关于如何使用DataTemplate
/DataTemplateSelector
类的示例:
- http://tech.pro/tutorial/807/wpf-tutorial-how-to-use-a-datatemplateselector
- http://mikestedman.blogspot.com/2009/04/datatemplateselector.html
- http://wpftutorial.net/DataTemplates.html
将演示文稿与模型分离总是一个好主意。你似乎走在了正确的轨道上。
对于每个对象类型,您应该创建一个DataTemplate,然后使用ItemTemplateSelector为每个对象类型选择正确的模板。
祝好运