Link to home
Create AccountLog in
Avatar of ichikuma
ichikumaFlag for United States of America

asked on

How to filter out duplicate items using MVVM

I'm trying to use one DataContext (ViewModel) to load my data once, and then use it in three different views.  I have it working for two of my views but the third one is my problem case.  Here's what I'm dealing with.

I have an ObservableCollection of Events, that contain EventDetails which contains a list of participants.
public class Events: ObservableCollection<EventDetails>
{
} 

public class EventDetails : ObservableCollection<Participants>
{
}

Open in new window

The first two views are easy, the first view is just a list of Event->Name.  The second view is also pretty simple, it's the list of Events->Details->Participants in a TreeView.  The third view is much more difficult.  I want to display all of the Names of the Participants from all of the events but only showing 'unique' ones, no duplicates and put them in a ListView.

Is there a way to somehow use databinding while filtering out duplicate data?
Avatar of Anurag Thakur
Anurag Thakur
Flag of India image

try to remove the duplicates by using a LINQ query
You will have to filter the duplicates before you do the data binding

sample for how to remove duplicates from LIST<T> using LINQ
http://stackoverflow.com/questions/1606679/remove-duplicates-in-the-list-using-linq
ASKER CERTIFIED SOLUTION
Avatar of MikeToole
MikeToole
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
See answer
Avatar of ichikuma

ASKER

Thanks for the quick response.  @MikeToole, if there are 10 events, would the property then hold all the participants names from all 10 events?
Since the Distict() method is applied to the List(of string) output by the Select() method, it will eliminate any duplicates and return a distinct list of participants no matter how many events there were.
Exactly what I needed explained in a manner that made sense to me.