У меня есть ListView, который ограничен CollectionViewSource. Я следил за этой статьей (многие из них) за несколько фильтров: http://www.zagstudio.com/blog/456#.UG8r6E1lWLEНесколько фильтров WPF CollectionViewSource, первый фильтр добавлен правильно, второй добавлен фильтр не
У меня есть два флажка, настроенных для тестирования, которые ничего не делают, кроме добавления фильтра. Всякий раз, когда я нажимаю на первый, фильтр добавляется в CollectionViewSource, и он работает. Затем, когда я нажимаю на противоположный флажок, вместо того, чтобы другой фильтр добавлялся в CollectionViewSource и оба фильтра работали, мой список выглядит пустым (когда он не должен основываться на данных, и это происходит в любом порядке проверки моих флажков)
Вот соответствующий код: (Фоновая: это приложение работает с фильтрующими "Заказы" для доставки программного обеспечения)
Загрузка заказов:
public class Order
{
public int index { get; set; }
public string host { get; set; }
public Int64 orderNumber { get; set; }
public string batchStatus { get; set; }
public string sku { get; set; }
public int numItems { get; set; }
public string orderSource { get; set; }
public string sourceOrderNumber { get; set; }
public DateTime orderDate { get; set; }
public DateTime orderTime { get; set; }
public int customerID { get; set; }
public string shipMethod { get; set; }
public string billingState { get; set; }
public bool statusChanged { get; set; }
public int numSkus { get; set; }
public string marketName { get; set; }
public float weight { get; set; }
}
public class Orders : ObservableCollection<Order>
{
public Orders()
{
SqlDataReader reader1 = cmd.ExecuteReader();
while (reader1.Read())
{
Order order = new Order();
order.host = (string)safeGetString(reader1, 0);
order.orderNumber = (Int64)reader1["OrderNumber"];
order.batchStatus = (string)safeGetString(reader1, 2);
order.orderSource = (string)safeGetString(reader1, 3);
order.sourceOrderNumber = safeGetString(reader1, 4);
order.orderDate = (DateTime)reader1["OrderDate"];
order.customerID = (int)reader1["CustomerID"];
order.shipMethod = (string)safeGetString(reader1, 7);
order.billingState = (string)safeGetString(reader1, 8);
order.numItems = (int)reader1["NumItems"];
order.numSkus = (int)reader1["NumSKUs"];
order.marketName = (string)safeGetString(reader1, 11);
order.weight = (float)(double)reader1["ShippedWeight"];
this.Add(order);
}
reader1.Close();
}
Настройка CollectionViewSource:
cvs = (CollectionViewSource)(this.Resources["cvs"]);
Функция Checkbox: (Запрограммированный "что фильтровать" с помощью filterString для тестирования)
public void checkBox2_Checked(object sender, RoutedEventArgs e)
{
filterString = "TX";
cvs.Filter += new FilterEventHandler(billingStateFilter);
}
public void checkBox1_Checked(object sender, RoutedEventArgs e)
{
filterString = "Standard";
cvs.Filter += new FilterEventHandler(shippingMethodFilter);
}
И, наконец, фильтры:
private void shippingMethodFilter(object sender, FilterEventArgs e)
{
Order order = e.Item as Order;
if ((order.shipMethod != filterString))
{
e.Accepted = false;
}
}
public void billingStateFilter(object sender, FilterEventArgs e)
{
Order order = e.Item as Order;
if ((order.billingState != filterString))
{
e.Accepted = false;
}
}
Как я уже сказал, первый фильтр всегда работает. Второй всегда делает экран незаполненным. Есть идеи?
Итак, у вас есть записи, которые являются как TX, так и стандартными? В отладке называются обработчики? – Paparazzi