ListViews с одинаковыми элементами, другой фильтр - PullRequest
0 голосов
/ 25 марта 2012

У меня есть 3 списка. Источники items привязаны к ObservableCollection, у которого класс person имеет целочисленное свойство (с INotifyPropertyChanged) «teamID». Теперь я хочу отфильтровать представления списка в зависимости от команды, в которой они находятся, есть ли способ сделать это легко (я знаю 2 решения для этого, но я думаю, что они не очень хороши, 1 состоит в том, чтобы сделать 3 ObservableCollection, но это будет сложно отслеживать и передавать всех людей в нужную коллекцию ObservableCollection или использовать триггер, такой как Visibility to Visible, если teamID - правильный teamID ^^) У меня есть 3 кнопки, и если я выберу элемент (человека) в любом из представлений списка, в зависимости от нажатой кнопки, этот человек teamID изменится. (Но я также хочу, чтобы он переключился на правильный список в зависимости от teamID)

Надеюсь, вы понимаете, в противном случае не стесняйтесь спрашивать более подробную информацию.

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

Я думаю, что это невозможно сделать без написания кода.

Я бы использовал CollectionView вместо привязки коллекции непосредственно к ListView. Это то, что WPF будет делать внутри, но создавая их самостоятельно, вы будете иметь контроль над многими вещами, такими как сортировка и, конечно, фильтры.

Создайте их, используя CollectionViewSource.GetDefaultView(yourCollection).

Примените фильтры и на установщик свойства id вашей команды сделайте CollectionView.Refresh() при изменении идентификатора команды. Если у вас нет слишком много данных, это не большая проблема. Но на многих данных Refresh() для трех представлений может быть немного тяжелым.

EDIT:

Я забыл вам сказать, что вы должны установить источник для каждого из ваших ListViews на соответствующий CollectionView, но я думаю, что это очевидно.

0 голосов
/ 26 марта 2012

Привязать к публичной собственности

  public List<person> SrtedPerson1 { get { return ListView.DataSource = OriginalList.Where(x => x.TeamId==filteringTeamId).ToList(); }} 

Иметь вызов кнопки NotifyPropertyChanged ("SrtedPerson1");

Это само по себе не даст вам динамическое обновление ListView.DataSource = OriginalList.Where (x => x.TeamId == filteringTeamId), так как оно возвращает только iEnumerable.

В публичном порядке я возвращаю List, как будто вы просто возвращаете iEnumerable, он все равно будет обёрнут списком для элемента управления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...