2012-03-25 7 views
0

Ich habe 3 Listenansichten. Die Objektquellen sind an eine ObservableCollection gebunden. Die Personenklasse hat eine Ganzzahleigenschaft (mit INotifyPropertyChanged) "teamID". Jetzt möchte ich die Listenansichten nach dem Team filtern, in dem sie sich befinden. Gibt es eine Möglichkeit, es einfach zu machen? (Ich kenne 2 Lösungen dafür, aber ich denke, sie sind nicht gut, 1 macht 3 ObservableCollection, aber das wird komplex sein Verfolgen Sie alle Personen und übertragen Sie sie auf die rechte ObservableCollection, oder verwenden Sie einen Trigger wie Visible to Visible, wenn die TeamID die richtige teamID ist ^^) Ich habe 3 Buttons und wenn ich ein Objekt (Person) auf einer der Listenansichten auswähle, Abhängig von der angeklickten Taste ändert sich die TeamID. (Aber ich will auch, dass er je nach TeamID in die richtige Listenansicht wechselt)Listenansichten mit gleichem Gegenstand unterschiedliche Filter

Ich hoffe du verstehst, ansonsten kannst du gerne weitere Details erfragen.

Antwort

2

Ich denke, es ist nicht möglich, eingewickelt bekommen ist, es zu tun, ohne irgendeinen Code zu schreiben.

Ich würde CollectionView verwenden, anstatt die Auflistung direkt an die ListView zu binden. Dies ist, was WPF intern tun wird, aber wenn Sie sie selbst erstellen, haben Sie die Kontrolle über viele Dinge wie Sortieren und natürlich Filtern.

Erstellen Sie sie mit CollectionViewSource.GetDefaultView(yourCollection).

Wenden Sie die Filter und auf den Setzer Ihrer Team-ID-Eigenschaft eine CollectionView.Refresh(), wenn Team-ID ändert. Wenn Sie nicht zu viele Daten haben, ist dies kein großes Problem. Aber auf vielen Daten Refresh() auf drei Ansichten könnte ein wenig schwer sein.

EDIT:

Ich habe vergessen, Ihnen zu sagen, dass Sie die Quelle auf jedem Ihrer Listviews auf die entsprechende Collection setzen müssen, aber ich denke, das liegt auf der Hand.

+0

Oke wird später darauf eingehen, wie man verschiedene Ansichten mit 1 CollectionView verwendet und sie an die verschiedenen Listenansichten bindet. – Maximc

0

Binden an ein öffentliches Eigentum

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

Haben Sie die Taste Anruf NotifyPropertyChanged ("SrtedPerson1");

Dies allein wird nicht Sie dynamisches Update ListView.DataSource = OriginalList.Where (x => x.TeamId == filteringTeamId) geben, wie es IEnumerable gibt nur.

In der Öffentlichkeit Ich kehre Liste, als ob Sie es nur IEnumerable mit Liste ohnehin für die Steuerung

+0

Ich weiß nicht, ich bin nicht so gut in diesem, aber Shoudn t ich benutze observableCollections stattdessen, so muss ich NotifyPropertyChanged nicht aufrufen? – Maximc

+0

Das funktioniert, aber ich mag es nicht, dass ich die NotifyPropertyChanged auf der Schaltfläche Ereignis aufrufen muss, es wird chaotisch imo, ich war mehr auf eine Antwort mit CollectionViewSource oder etwas hoffen, aber wenn es keine bessere Antwort gibt, ich ll Sie Lass deine Antwort die richtige sein. Aber dann werde ich meine Fragen neu schreiben (weil es fortgeschrittener ist, es verwendet keine Knöpfe, sondern Drag & Drop, so dass es schwer ist zu verfolgen, wo das raisepropertychange -Ereignis verwendet wird) – Maximc

+0

Wenn dann eine Schaltfläche und ein Button-Ereignis haben NotifyPropertyChanged ist nur eine Codezeile. Die Ausgabe von OriginalList.Where (x => x.TeamId == filteringTeamId) ist keine ObservableCollection. Du hast gesagt, du wolltest einen Knopf, der die Veränderung macht. Eine ColletionViewsSource wird mehr für einen statischen Filter verwendet. – Paparazzi

Verwandte Themen