Ich habe eine beobachtbare Sammlung.So filtern Sie ObservableCollection auf Multipie-Werten
Die Klasse dieser Sammlung hat mehrere Felder, die wiederum Serverwerte haben können.
Ich wünsche meinem Benutzer in der Lage sein, auf zahlreiche Felder und Werte zu suchen.
Ich habe so weit wie eine ICollection verwenden, aber alle Beispiele, die ich gesehen habe, basiert auf der Suche auf 1 Feld.
Das ist meine Klasse:
public class Tasks
{
private string JobPriority;
private string JobLabel;
private string JobType;
private string UserRef;
}
JobPriority can be 'High', 'Low'
JobLabel can be 'Apple', 'Android', 'Microsoft'
JobType can be 'Internal', 'Private', 'Public'
Also, instanziiert ich meine Sammlung als solche:
public ObservableCollection<KanbanModelExtra> Tasks
{
get
{
if (_tasks == null)
{
TaskView = CollectionViewSource.GetDefaultView(_tasks);
TaskView.Filter = TaskFilter;
}
return _tasks;
}
set
{
_tasks = value;
}
}
public ICollectionView TaskView { get; private set; }
und stellte meine Filter als solche:
private bool TaskFilter(
object item)
{
var task = item as KanbanModelExtra;
if (task == null)
{
return false;
}
foreach (var searchItem1 in JobPrioritiesToSearchOn)
{
if (task.JobPriority == searchItem1)
{
foreach (var searchItem2 in JobLabelsToSearchOn)
{
if (task.JobLabel == searchItem2)
{
foreach (var searchItem3 in JobTypesToSearchOn)
{
if (task.JobType == searchItem3)
{
if (SearchByCurrentUser)
{
if (task.UserRef == HeartBeat.CurrentUser.UserRef)
{
return true;
}
}
else
{
return true;
}
}
}
}
}
}
}
return false;
}
aber dies scheint ' schwer und hässlich. Außerdem wird jede Änderung die Sammlung aktualisieren. Wo ich nach allen Kriterien die Kollektion frisch anlügen würde.
Gibt es einen besseren Weg?
die Testsreturn ((SearchByCurrentUser && task.UserRef == HeartBeat.CurrentUser.UserRef) || !SearchByCurrentUser) &&
JobPrioritiesToSearchOn.Contains(task.JobPriority) &&
JobLabelsToSearchOn.Contains(task.JobLabel) &&
JobTypesToSearchOn.Contains(task.JobType));
hmm, scheint so einfach! Danke für deine Antwort. Ich werde es einreichen und Bericht erstatten. Danke –
Sorry, ich habe die Antwort bearbeitet, weil sie falsch war. – eocron
Hallo, ich muss jetzt von meinem PC weg sein :(Ich möchte Geschwindigkeitstests zwischen beiden Antworten machen. Ich schätze Ihre Zeit und antworte. Antworten und versprechen, sobald ich das abgeschlossen habe. Danke nochmal :) –