Ich binde eine ListBox
an eine ICollectionView
, die im ViewModel definiert ist (VM ab jetzt). Ich habe eine Eigenschaft für das ausgewählte Element (SelectedFoo
), die im Konstruktor des VM auf das erste gesetzt wird.
Wenn jemand Text in ein Textfeld eingibt, filtere ich die Sammlung basierend auf dieser Eingabe (bis hierher alles gut).
Wie kann ich den ausgewählten Index auf das erste Element in der Sammlung setzen, nachdem einige Filter angewendet wurden? Ich kann nicht auf das erste Objekt in der ICollectionView
aus dem Code binden.
Irgendwelche Ideen?
Hier ist etwas reduzierter Code, einschließlich der List
, der ICollectionView
, an die ich im XAML binde, und der Code, der im FooFilterString
steht, der aktualisiert wird, wenn der Benutzer in das Textfeld eingibt.
// Dies ist die zugrunde liegende Liste
public List FooList
{
get { return _fooList; }
set
{
if (Equals(value, _fooList)) return;
_fooList = value;
RaisePropertyChanged();
}
}
private List _fooList;
// Hier ist, an was die List-Box sich bindet
public ICollectionView FooListView
{
get { return _fooListView; }
set
{
if (Equals(value, _fooListView)) return;
_fooListView = value;
RaisePropertyChanged();
}
}
private ICollectionView _fooListView ;
// Hier wird im XAML gebunden, während der Benutzer tippt, wird die Liste gefiltert.
// Ich möchte mich an das erste Element der gefilterten Liste binden.
public string FooFilterString
{
get { return _fooFilterString; }
set
{
_fooFilterString = value;
FooListView.Filter = (s => some_logic); // <-- filtert die Liste
/*
* Wie kann ich hier den ausgewählten Index setzen ?!
*/
}
}
private string _fooFilterString;
// Ich binde mich hieran und möchte das nach dem Filtern setzen. Beim ersten Mal setze ich es einfach
// auf das erste Element aus der FooList, aber nach dem Filtern verliere ich die Auswahl
public Foo SelectedFoo {
get { /*...*/ }
set { /*...*/ }
}
private Foo _selectedFoo;