| 

.NET C# Java Javascript Exception

3
Hallo zusammen

Ausgangslage:

Treeview mit verschiedenen Gruppen

    Privat
    Geschäft
    Turnverein


Personen

    Person A
    Person B
    Person C


Da nun eine Person in mehreren Gruppeh eingeteilt werden kann, bin ich über den wef einer Refernzliste gegangen:

RefGroupPerson

    Privat/Person A
    Turnverein/Person A
    Geschäft/Person B
    Turnverein/Person C
    Geschäft/Person C


Die Personen werden in einer Klasse mit IcollectionView verwaltet, der als DataContext für ein DataGrid benutzt wird.

public class Persons : List<Person>
{
private ICollectionView _view;

public Persons
{
this.Add(new Person(A));
this.Add(new Person(B));
this.Add(new Person(C));
_view = CollectionviewSource.GetDefaultView(this);
}

public ICollectionView View{ get { return _view; } }

public void Filter(List<RefGroupPerson> groupPersonList)
{
View.Filter= // hier muss der Filter an Handen der groupPersonList dynamisch aufgebaut werden.
}

}


Nun die Frage:
Wie ist der Filter, der keine Where-Funktion bietet aufzubauen?

    Mit einer foreach-Schlaufe durch die groupPersonList blättern um den Filter aufzubauen geht wohl nicht.

    Möglich wäre den Filter mittels Lambada aufzubauen, konnte jedoch im Netz keine Informationen finden, was darauf hindeutet, dass dies nicht machbar ist.

    Gibt es noch eine 3. Möglichkeit, die ich nicht kenne?


Gruss Alex
News:
09.11.2012
Maendler 214 7
2 Antworten
1
Als Filter einer ICollectionView hängst Du eine Prädikatfunktion ein, die die Ergebnismenge bestimmt (das entspricht "den Filter mittels Lambada aufzubauen". In Deinem Fall sollte das ungefähr so funktionieren:

var turner = groupPersonList.Where(p => p.ImTurnverein);
View.Filter = p => turner.Contains(p as Person);
09.11.2012
ffordermaier 8,4k 3 9
0
Hallo ffordermaier

Dank Deinem Typ mit der Präsiktsfunktion und regerschen im Netz konnte ich den Filter realisieren.

private void OnGroupChanged(object sender, ItemsAddedEventArgs e)
{

string[] filterKeys = new string[e.AddedItems.Count];

// Auszuwählende PersonenID's in StringArray umwandeln.
int i = 0;
foreach (var item in e.AddedItems)
{
filterKeys = item.ItemID.ToString();
i++;
}

// Die Funktion let y wandelt die ID in ein String um, damit mit Contains die Werte
// aus der Klasse und dem Array filterKeys verglichen werden können.
var query = from person in this
let y = person.ID.ToString()
where filterKeys.Contains(y)
select person;

View.Filter = p => query.Contains(p as PersonItem);

}
[/code]
10.11.2012
Maendler 214 7

Stelle deine .net-Frage jetzt!