如何在每个ListBox项目文本块中显示绑定到不同表的字段
-
08-07-2019 - |
题
向所有人致以问候,对不起我的英语! 我有一个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。