向所有人致以问候,对不起我的英语! 我有一个ListBox,它是ItemsSource = myClientsList.DefaultView。 ListBox的项目有一个模板(ControlTemplate),它在一个单独的资源文件中定义。 每个Item都包含一个TextBlock,Text -property每个都有一个绑定到我的对象myClientsList的字段。

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

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

P.S。我是.Net和WPF的新手,可能在我的解释中有错误 - 对不起。

有帮助吗?

解决方案

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

其他提示

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

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

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

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

或者,使用ItemsControl.ItemTemplateSelector显式指向不同的DataTemplates,具体取决于项的类型。如果您真的必须使用ControlTemplates,请查看ItemsControl.ItemContainerStyleSelector。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top