1

向所有人问好,对不起我的英语!我有一个 ListBox,它是 ItemsSource = myClientsList.DefaultView。ListBox 的 Items 有一个模板 (ControlTemplate),它在单独的资源文件中定义。每个项目都包含一个小文本块,每个文本属性都绑定到我的对象 myClientsList 的字段。

我需要在这个项目模板中添加更多的 TexBlock,它们中的每一个都必须绑定到另一个我的类 myOrdersList 的字段。- (所以我希望从我的数据库的不同表中查看每一行 ListBox 信息 - 这是一个问题)。

问题在于 ListBox 的 ItemsSource 具有指向对象 myClientsList 的链接,并且我无法将 myOrderList 设置为同一 ListBox 的 ItemSource。所以我必须找到一种方法来在 ControlTemplate 中指定 TextBlock.DataContext 或者如何以另一种方式解决这个问题?

ps 我是 .Net 和 WPF 的新手,我的解释中可能有错误 - 抱歉。

4

2 回答 2

1

听起来您有一个 DataGrid 类型的显示,并且想要添加更多列以显示给定客户端的订单信息。如果是这种情况,您将不得不做几件事。首先,您需要创建一个复合对象,将两个实体的信息存储到一个对象中(因此控件的每一行都有它需要显示的所有数据)。其次,我建议使用实际的 DataGrid 控件来显示行,而不是模板化 ListBoxItem。带有内置到框架中的 GridView 的 ListView 不是很好,所以我会推荐WPFToolkit 的 DataGrid作为免费选项。

于 2009-11-29T20:39:08.743 回答
0

如果我理解了这个问题,这里有两个问题:如何创建包含客户和订单的单个集合,以及如何在同一个列表框中以不同的方式显示客户和订单?

关于第一个,您可以使用 CompositeCollection 执行此操作。

关于第二个,定义两个 DataTemplates 而不是 ControlTemplate。作为每个 DataTemplate 的键,使用它要呈现的对象的类型,例如

<DataTemplate x:Key="{x:Type local:Client}">

或者,使用 ItemsControl.ItemTemplateSelector 根据项目的类型显式指向不同的 DataTemplates。如果您真的必须使用 ControlTemplates,请查看 ItemsControl.ItemContainerStyleSelector。

于 2009-11-29T19:55:32.227 回答