2 Stimmen

Kann ich mich mit dem ersten Element einer CollectionView verbinden?

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;

3voto

dkozl Punkte 32744

Um die Kommentare zur Auswahl des ersten Elements aus ICollectionView zusammenzufassen, können Sie ICollectionView.MoveCurrentToFirst() verwenden.

FooListView.Filter = s => some_logic;
FooListView.MoveCurrentToFirst() 

Sie müssen auch IsSynchronizedWithCurrentItem aktivieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X