使用ListBox过滤Datagrid

时间:2012-09-21 06:43:58

标签: c# wpf datagrid checkbox listbox

我有一个ListBox和一个DataGrid,DataGrid显示供应商提供的报价,而ListBox显示供应商列表。我想要实现的是检查/取消选中供应商列表中的供应商并过滤DataGrid,以便DataGrid只显示ListBox中检查的供应商的报价。

我现在面临的困难是,

我有一个独特的供应商列表

class Supplier
{
    bool IsChecked {get; set;}
    Person Supplier {get; set;}

}

ObservableCollections<Supplier> SupplierList;

我有一份报价清单

class Quote
{
    double Price {get; set;}
    Supplier Supplier{get; set;}
    Quote(double price, Supplier supplier)
    {
         Price = price;
         Supplier = supplier;
    }
}

ObservableCollections<Quote> QuoteList;

QuoteList绑定到DataGrid,而SupplierList绑定到ListBox。

当我在ListBox中选中/取消选中SupplierList时,报价中的供应商是否可以同时更改?以及如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

在这种情况下,您不需要生成ObservableCollection,您不会被锁定为具有物理列表而不仅仅是查询。

我建议您引入一个SupplierQuoteQuery类(有关ViewModel的更多信息,请参阅MVVM pattern)以支持此视图,它需要实现INotifyPropertyChanged,以便您可以建议何时更改过滤列表。

当您的IsChecked发生更改时,您需要通过某种方式通知SupplierQuoteQuery类,这应该会导致为新的Property FilteredQuotes调用PropertyChanged。

public IEnumerable<Quote> FilteredQuotes { get {
  return from x in Quotes where x.Supplier.IsChecked select x; } }