Die AutoCompleteBox das Filtern von Daten und ein individueller Splashscreen für Windows Phone 7 (Teil 2)
Kommentare

Menü 2 für Experten: Das Filtern von Daten
Der Windows-Explorer macht es mit der Suchfunktion vor. Der Inhalt des Explorers zeigt nur die Daten an, die dem Wert im Suchfeld entsprechen. Genau eine

Menü 2 für Experten: Das Filtern von Daten

Der Windows-Explorer macht es mit der Suchfunktion vor. Der Inhalt des Explorers zeigt nur die Daten an, die dem Wert im Suchfeld entsprechen. Genau eine solche Filterfunktion ohne stetigen Request zum Server bietet die CollectionSourceView. Die entsprechende Collection mit Daten wird der Property Source vom CollectionSourceView überreicht. Anschließend vergibt man mit einem SortDescription-Objekt eine Regel, welche Property vom Entity für die Sortierung berücksichtigt werden soll. Zudem kann man wie unter LINQ die Sortierlogik auswählen. Für eine Sortierreihenfolge vom größten bis zum kleinsten Wert dient Ascending. Für eine umgekehrte Reihenfolge wird Descending verwendet.

Ist durch einen Wert auf der Oberfläche ein Keyword gesetzt, muss von der CollectionSourceView ein Filter-Event abonniert werden. Dieses wird anschließend sofort ausgeführt. In der dazu ausgeführten Methode werden alle weiteren Informationen durch die FilterEventArgs überreicht. Bei dem mitgelieferten Parameter wird eine Accepted-Property bereitgestellt. Dieser wird entweder der zu filternde Wert übergeben oder mittels True alles zurückgesetzt (Listings 2 und 3).

Listing 2: ViewModel mit CollectionSourceView

public class ProductsViewModel
{
    public List Products { get; set; }
    public CollectionViewSource SortedList { get; set; }

    private string _searchword;
    public string Searchword
    {
        get { return _searchword; }
        set
        {
            _searchword = value;

            SortedList.Filter += SortedList_Filter;
        }
    }

    public ProductsViewModel()
    {
        Products = new SampleDataSource().Collection.ToList();

        SortedList = new CollectionViewSource();
        SortedList.Source = Products;
        SortedList.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
    }

    private void SortedList_Filter(object sender, FilterEventArgs e)
    {
        Item item = e.Item as Item;

        if (item != null)
        {
            if (Searchword == string.Empty)
            {
                e.Accepted = true;
            }
            else
            {
                e.Accepted = item.Name.StartsWith(Searchword);
            }
        }
    }
}  

Listing 3: XAML-Deklaration mit einem Binding zur CollectionSourceView


    
        
        
    

    
    
  
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -