如何在使用ItemsSource绑定ListBox时显示来自子元素的属性?

3

我无法理解这段代码,请看下面的示例:

 <ListBox Width="200" 
          ItemsSource="{Binding CurrentArticle.ArticleCategories}" 
          DisplayMemberPath="{Binding Category.Name}">
  </ListBox>
ArticleCategories 是我数据库中的一张表,其中包含两个外键,一个指向 Article,另一个指向 Categories,因此 ArticleCategories 是一个包含 ArticlesCategories 的列表。
我想在这个列表框中显示当前文章(CurrentArticle)有哪些分类,但我不知道如何做。我想为 ListBox 中的每个 Category 显示 Category.Name
目前,列表框显示 "Data.ArticleCategory",因为它不知道如何显示它。
我尝试过使用 DisplayMemberPath="Category.Name",但没有成功。
我需要使用某种数据模板吗?如果需要,应该如何操作?
谢谢。
3个回答

4

DisplayMemberPath不是你添加绑定的字段,它只是给定项上属性的名称。 DisplayMemberPath="Name"就足够了。


我已经尝试过了,但没有起作用,仍然显示Data.ArticleCategory。 - syncis
我不太确定,但我的猜测是,这只适用于直接属性,但您想访问另一个对象的属性。虽然这在绑定方面有效,但我认为这在DisplayMemberPath方面无效。您现在应该做的是创建一个ItemTemplate,添加一个TextBlock,文本属性是您在DisplayMemberPath中尝试的初始绑定。因为DisplayMemberPath只是一个快捷方式,在我看来,它只在20%的用例中有价值。 - dowhilefor
添加ItemTemplate并使用<TextBlock Text="{Binding Category.Name}"></TextBlock>就可以了!我不知道为什么,但正如你所说,有时仅使用DisplayMemberPath无法正常工作。 - syncis

3

您不需要绑定:

DisplayMemberPath="Category.Name"

编辑:由于您将ItemsSource绑定到CurrentArticle.ArticleCategories,我假设您的ListBox项是Category类型的对象?如果是这样,那么路径应该只是“Name”,而不是“Category.Name”。


我已经尝试过了,但没有起作用,仍然显示Data.ArticleCategory。 - syncis
@Thomas,“ArticleCategories”包含一个关系实体“ArticleCategory”对象。因此,每个“ArticleCategory”上都有一个“Article”属性和一个“Category”属性。我认为这就是他在代码示例之后试图解释的内容。 - Filip Ekberg

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接