按组DataGrid

时间:2015-10-15 03:16:55

标签: c# wpf linq mvvm datagrid

我正在研究WPF - MVVM应用程序。

我有一个dataGrid填充了由文本框过滤的发票,工作正常。

现在,我按发票编号(suppInvNumber)对发票进行分组,过滤器不再有效。

我怎样才能让它发挥作用?

视图模型

public class ConsultInvoiceViewModel:ViewModelBase
    {
        public Context ctx = new Context();

        private ICollectionView _dataGridCollection;
        private string _filterString;
        private ObservableCollection<Invoice> invoiceCollection; 

        public ConsultInvoiceViewModel()
        {
            DataGridCollection = CollectionViewSource.GetDefaultView(Get());
            DataGridCollection.Filter = new Predicate<object>(Filter);
        }

        public ICollectionView DataGridCollection
        {
            get
            { 
                return _dataGridCollection; 
            }
            set 
            { 
                _dataGridCollection = value; 
                OnPropertyChanged("DataGridCollection"); }
        }

        public string FilterString
        {
            get 
            { 
                return _filterString; 
            }
            set 
            {
                _filterString = value;
                OnPropertyChanged("FilterString");
                FilterCollection();
            }
        }

        private void FilterCollection()
        {
            if (_dataGridCollection != null)
            {
                _dataGridCollection.Refresh();
            }
        }

        public bool Filter(object obj)
        {
            var data = obj as Invoice;
            if (data != null)
            {
                if (!string.IsNullOrEmpty(_filterString))
                {
                    return data.suppInvNumber.Contains(_filterString)

                }
                return true;
            }
            return false;
        }


        private ObservableCollection<Invoice> Get()
        {
            var query = ctx.Invoices
                        .GroupBy(x => new { x.suppInvNumber, x.shop1, x.date, x.foodSupplier })
                        .ToList()
                        .Select(i => new Invoice
                        {
                            suppInvNumber = i.Key.suppInvNumber,
                            shop1 = i.Key.shop1,
                            date = i.Key.date,
                            foodSupplier = i.Key.foodSupplier,
                            totalPrice = i.Sum(t => t.totalPrice),
                        })
                        .AsQueryable();

            invoiceCollection = new ObservableCollection<Invoice>(query);
            return invoiceCollection;
        }
}

0 个答案:

没有答案