Обновление одного ObservableCollection, но отображение в двух разных ListView - PullRequest
0 голосов
/ 28 мая 2020

Предположим, у меня есть одна коллекция ObservableCollection, которую я вставляю, обновляю и удаляю.

public ObservableCollection<Item> AllItems {get;set;} 

Класс Item (который реализует INotifyPropertyChanged) выглядит так:

public class Item
{
  public int Id {get;set;}
  public int Kind {get;set;}
  public string Text {get;set;}
}

У меня это связано в моем представлении в одном ListView. Все работает, то есть, если я удалю, добавлю или обновлю элементы в ObservableCollection из моей ViewModel, они будут обновляться в моем ListView, как и ожидалось.

Но теперь мне нужно разделить ListView на 2 ListView в моем представлении. Первый ListView должен отображать все элементы, у которых Item.Kind = 1. А другой ListView должен иметь все элементы, у которых Item.Kind = 2.

Я не против привязки к двум разным ObservableCollections из моей ViewModel, но мне бы очень хотелось решение, в котором я мог бы просто сделать:

var item = new Item { Id=22, Kind=1, Text="SomeText" };
AllItems.Add(item);
AllItems.First(x => x.Id==22).Text = "SomeOtherText";
AllItems.Remove(item);

И тогда эти операции автоматически отражаются в 2 ListViews. Итак, в приведенном выше примере новый элемент просматривается, обновляется и удаляется только из первого ListView (где Item.Kind = 1).

Возможно ли это?

РЕДАКТИРОВАТЬ: Я должен сказать, что я пытался использовать два CollectionViewSource с тем же ObservableCollection в качестве источника. Но это не удается и не кажется правильным решением.

1 Ответ

3 голосов
/ 28 мая 2020

создать два ListCollectionViews с разными фильтрами - по одному для каждого ListView

public ICollectionView Items_1 { get; private set; }
public ICollectionView Items_2 { get; private set; }

public ViewModel
{
    Items_1 = new ListCollectionView(AllItems);
    Items_1.Filter = o => (o as Item).Kind == 1;

    Items_2 = new ListCollectionView(AllItems);
    Items_2.Filter = o => (o as Item).Kind == 2;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...