【问题标题】:how to show distinct attribute value in a ComboBox using LINQ?如何使用 LINQ 在 ComboBox 中显示不同的属性值?
【发布时间】:2012-11-27 06:37:19
【问题描述】:

这是 Book 类 图书{BookId, Title, Category, Quantity}; 那么,如何使用 linq 查询从每个类别中仅选择一个对象? 我试过这样,

this.catagoryList.DataContext = ldc.Books.Distinct(); //categoryList is a ComboBox

但你知道它不起作用。所有这些对象都是独一无二的,因此它多次显示相同的类别。 实际上我希望它像 GroupBy,但我想从每个组中只选择一个对象以在 ComboBox 中显示唯一的类别。谢谢。

XAML:

    <DataTemplate x:Key="CatagoryTemplate">
          <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding Path=Catagory}"/>
          </StackPanel>
    </DataTemplate>
...
 <ComboBox Name="catagoryList" ItemsSource="{Binding}" ItemTemplate="{StaticResource CatagoryTemplate}" SelectionChanged="catagoryList_SelectionChanged" IsSynchronizedWithCurrentItem="True"/>
...

【问题讨论】:

    标签: c# wpf linq dynamic-linq


    【解决方案1】:
    this.catagoryList.DataContext = ldc.Books.Select(b => b.Category).Distinct();
    

    如果您不想更改模板:

    catagoryList.DataContext = ldc.Books.Select(b => b.Category)
                                        .Distinct()
                                        .Select(c => new { Catagory = c });
    

    但我认为最好更改模板以匹配字符串。

    <DataTemplate x:Key="CatagoryTemplate">
          <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding}"/>
          </StackPanel>
    </DataTemplate>
    

    【讨论】:

    • 异常:对象引用未设置为对象的实例!请参阅 XAML 代码
    • 您的Catagory 打印错误。此外,您正在尝试绑定到属性 Catagory,但此 linq 返回字符串列表。
    • 您的建议确实很有帮助,但它不起作用。有什么不同的方法吗?
    • 可能是一个例外:“对象引用未设置为对象的实例。”
    【解决方案2】:

    虽然这段代码的上下文不清楚,但一般来说,您应该不理会 ComboBox 的 DataContext 并将其 ItemsSource 属性绑定到视图模型中返回 linq 查询的属性。

    也就是说,在您的特定代码中,您只需在调用 Distinct() 之前选择()类别:

    this.catagoryList.DataContext = ldc.Books.Select(book=>book.Category).Distinct();

    编辑:

    只需删除您的 DataTemplate,它没有用。如果您将 DataContext 设置为上面的 LINQ 查询,然后按照您的操作将 ItemsSource 绑定到 DataContext,它将正确显示字符串列表。

    【讨论】:

    • 异常:对象引用未设置为对象的实例!请参阅 XAML 代码。
    【解决方案3】:
    ldb.Books.Select(b=>b.Category).Distinct()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      • 2015-08-21
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多