Xamarin.Forms Searchbar
ist Xamarin.FormsSearchBar
ein Benutzereingabesteuerelement, das zum Initiieren einer Suche verwendet wird. Das SearchBar
Steuerelement unterstützt Platzhaltertext, Abfrageeingaben, Suchausführung und Abbruch. Der folgende Screenshot zeigt eine SearchBar
Abfrage mit Ergebnissen, die in einem ListView
angezeigt werden:
Die SearchBar
-Klasse definiert die folgenden Eigenschaften:
CancelButtonColor
ist einColor
, der die Farbe der Schaltfläche "Abbrechen" definiert.CharacterSpacing
vom Typdouble
: Abstand zwischen den Zeichen desSearchBar
-Texts.FontAttributes
ist einFontAttributes
Enumerationswert, der bestimmt, ob dieSearchBar
Schriftart fett, kursiv oder nicht formatiert ist.FontFamily
ist einstring
, der die schriftartenfamilie bestimmt, dieSearchBar
von verwendet wird.FontSize
kann einNamedSize
Enumerationswert oder eindouble
Wert sein, der bestimmte Schriftgrößen plattformübergreifend darstellt.HorizontalTextAlignment
ist einTextAlignment
Enumerationswert, der die horizontale Ausrichtung des Abfragetexts definiert.VerticalTextAlignment
ist einTextAlignment
Enumerationswert, der die vertikale Ausrichtung des Abfragetexts definiert.Placeholder
ist einstring
, der den Platzhaltertext definiert, z. B. "Suche...".PlaceholderColor
ist einColor
, der die Farbe des Platzhaltertexts definiert.SearchCommand
ist eineICommand
, die das Binden von Benutzeraktionen, z. B. Fingerklicks oder Klicks, an Befehle ermöglicht, die in einem ViewModel definiert sind.SearchCommandParameter
ist einobject
, der den Parameter angibt, derSearchCommand
an den übergeben werden soll.Text
ist ein ,string
der den Abfragetext imSearchBar
enthält.TextColor
ist einColor
, der die Abfragetextfarbe definiert.TextTransform
ist einTextTransform
Wert, der die Groß-/Kleinschreibung desSearchBar
Texts bestimmt.
Diese Eigenschaften werden von BindableProperty
-Objekten unterstützt, was bedeutet, dass die SearchBar
angepasst werden kann und das Ziel von Datenbindungen sein kann. Das Angeben von Schriftarteigenschaften für ist mit dem SearchBar
Anpassen von Text in anderen Xamarin.Forms Text-Steuerelementen konsistent. Weitere Informationen finden Sie unter Schriftarten in Xamarin.Forms.
Erstellen einer Suchleiste
Ein SearchBar
kann in XAML instanziiert werden. Die optionale Placeholder
Eigenschaft kann festgelegt werden, um den Hinweistext im Abfrageeingabefeld zu definieren. Der Standardwert für ist Placeholder
eine leere Zeichenfolge, sodass kein Platzhalter angezeigt wird, wenn er nicht festgelegt ist. Das folgende Beispiel zeigt, wie sie in SearchBar
XAML instanziieren, indem die optionale Placeholder
Eigenschaft festgelegt ist:
<SearchBar Placeholder="Search items..." />
Ein SearchBar
kann auch im Code erstellt werden:
SearchBar searchBar = new SearchBar{ Placeholder = "Search items..." };
SearchBar-Darstellungseigenschaften
Das SearchBar
Steuerelement definiert viele Eigenschaften, die die Darstellung des Steuerelements anpassen. Im folgenden Beispiel wird gezeigt, wie sie SearchBar
in XAML instanziieren, wobei mehrere Eigenschaften angegeben sind:
<SearchBar Placeholder="Search items..."
CancelButtonColor="Orange"
PlaceholderColor="Orange"
TextColor="Orange"
TextTransform="Lowercase"
HorizontalTextAlignment="Center"
FontSize="Medium"
FontAttributes="Italic" />
Diese Eigenschaften können auch beim Erstellen eines SearchBar
Objekts im Code angegeben werden:
SearchBar searchBar = new SearchBar
{
Placeholder = "Search items...",
PlaceholderColor = Color.Orange,
TextColor = Color.Orange,
TextTransform = TextTransform.Lowercase,
HorizontalTextAlignment = TextAlignment.Center,
FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(SearchBar)),
FontAttributes = FontAttributes.Italic
};
Der folgende Screenshot zeigt das resultierende SearchBar
Steuerelement:
Hinweis
Unter iOS enthält die SearchBarRenderer
-Klasse eine überschreibbare UpdateCancelButton
Methode. Diese Methode steuert, wann die Abbrechen-Schaltfläche angezeigt wird, und kann in einem benutzerdefinierten Renderer überschrieben werden. Weitere Informationen zu benutzerdefinierten Renderern finden Sie unter Xamarin.Forms Benutzerdefinierte Renderer.
Ausführen einer Suche mit Ereignishandlern
Eine Suche kann mithilfe des SearchBar
-Steuerelements ausgeführt werden, indem ein Ereignishandler an eines der folgenden Ereignisse angefügt wird:
SearchButtonPressed
wird aufgerufen, wenn der Benutzer entweder auf die Suchschaltfläche klickt oder die EINGABETASTE drückt.TextChanged
wird aufgerufen, wenn der Text im Abfragefeld geändert wird.
Das folgende Beispiel zeigt einen Ereignishandler, der an das TextChanged
Ereignis in XAML angefügt ist und zum Anzeigen von Suchergebnissen verwendet wird ListView
:
<SearchBar TextChanged="OnTextChanged" />
<ListView x:Name="searchResults" >
Ein Ereignishandler kann auch an einen SearchBar
im Code erstellten angefügt werden:
SearchBar searchBar = new SearchBar {/*...*/};
searchBar.TextChanged += OnTextChanged;
Der TextChanged
Ereignishandler in der CodeBehind-Datei ist identisch, unabhängig davon, ob der SearchBar
über XAML oder Code erstellt wird:
void OnTextChanged(object sender, EventArgs e)
{
SearchBar searchBar = (SearchBar)sender;
searchResults.ItemsSource = DataService.GetSearchResults(searchBar.Text);
}
Das vorherige Beispiel impliziert das Vorhandensein einer DataService
Klasse mit einer GetSearchResults
Methode, die Elemente zurückgeben kann, die einer Abfrage entsprechen. Der SearchBar
-Eigenschaftswert des Steuerelements Text
wird an die GetSearchResults
-Methode übergeben, und das Ergebnis wird verwendet, um die ListView
-Eigenschaft des Steuerelements ItemsSource
zu aktualisieren. Der Gesamteffekt besteht darin, dass Suchergebnisse im ListView
-Steuerelement angezeigt werden.
Die Beispielanwendung stellt eine DataService
Klassenimplementierung bereit, die zum Testen der Suchfunktionalität verwendet werden kann.
Ausführen einer Suche mithilfe eines Viewmodels
Eine Suche kann ohne Ereignishandler ausgeführt werden, indem die SearchCommand
Eigenschaften und SearchCommandParameter
an ICommand
Implementierungen gebunden werden. Das Beispielprojekt veranschaulicht diese Implementierungen mithilfe des MVVM-Musters (Model-View-ViewModel). Weitere Informationen zu Datenbindungen mit MVVM finden Sie unter Datenbindungen mit MVVM.
Das viewmodel in der Beispielanwendung enthält den folgenden Code:
public class SearchViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public ICommand PerformSearch => new Command<string>((string query) =>
{
SearchResults = DataService.GetSearchResults(query);
});
private List<string> searchResults = DataService.Fruits;
public List<string> SearchResults
{
get
{
return searchResults;
}
set
{
searchResults = value;
NotifyPropertyChanged();
}
}
}
Hinweis
Das Viewmodel geht davon aus, dass eine DataService
Klasse vorhanden ist, die Suchvorgänge ausführen kann. Die DataService
-Klasse, einschließlich Beispieldaten, ist in der Beispielanwendung verfügbar.
Der folgende XAML-Code zeigt, wie sie an SearchBar
das Beispielansichtmodel gebunden werden, wobei ein ListView
Steuerelement die Suchergebnisse anzeigt:
<ContentPage ...>
<ContentPage.BindingContext>
<viewmodels:SearchViewModel />
</ContentPage.BindingContext>
<StackLayout ...>
<SearchBar x:Name="searchBar"
...
SearchCommand="{Binding PerformSearch}"
SearchCommandParameter="{Binding Text, Source={x:Reference searchBar}}"/>
<ListView x:Name="searchResults"
...
ItemsSource="{Binding SearchResults}" />
</StackLayout>
</ContentPage>
In diesem Beispiel wird festgelegtBindingContext
, dass es sich um eine instance der SearchViewModel
-Klasse handelt. Es bindet die SearchCommand
-Eigenschaft an die PerformSearch
ICommand
im Viewmodel und bindet die SearchBar
Text
-Eigenschaft an die SearchCommandParameter
-Eigenschaft. Die ListView.ItemsSource
-Eigenschaft ist an die SearchResults
-Eigenschaft des Viewmodels gebunden.
Weitere Informationen zur Schnittstelle und den ICommand
Bindungen finden Sie unter Xamarin.Forms Datenbindung und ICommand-Schnittstelle.