SearchBar de Xamarin.Forms
Xamarin.FormsSearchBar
es un control de entrada de usuario que se usa para iniciar una búsqueda. El control SearchBar
admite texto de marcador de posición, entrada de consulta, ejecución de búsqueda y cancelación. En la captura de pantalla siguiente se muestra una consulta SearchBar
con los resultados mostrados en una instancia de ListView
:
La clase SearchBar
define las propiedades siguientes:
CancelButtonColor
es unColor
que define el color del botón cancelar.CharacterSpacing
, del tipodouble
, es el espaciado entre los caracteres del texto deSearchBar
.FontAttributes
es un valor de enumeraciónFontAttributes
que determina si laSearchBar
fuente es negrita, cursiva o ninguna.FontFamily
es un objetostring
que determina la familia de fuentes usada por elSearchBar
.FontSize
puede ser un valor de enumeraciónNamedSize
o un valordouble
que representa tamaños de fuente específicos entre plataformas.HorizontalTextAlignment
es un valor de enumeraciónTextAlignment
que define la alineación horizontal del texto de la consulta.VerticalTextAlignment
es un valor de enumeraciónTextAlignment
que define la alineación vertical del texto de consulta.Placeholder
es unstring
que define el texto del marcador de posición, como "Buscar...".PlaceholderColor
es unColor
que define el color del texto del marcador de posición.SearchCommand
es unICommand
que permite enlazar acciones de usuario, como pulsaciones de dedo o clics, a los comandos definidos en un modelo de vista.SearchCommandParameter
es un objetoobject
que especifica el parámetro que se debe pasar alSearchCommand
.Text
es unstring
que contiene el texto de la consulta enSearchBar
.TextColor
es unColor
que define el color del texto de la consulta.TextTransform
es un valorTextTransform
que determina el uso de mayúsculas y minúsculas del textoSearchBar
.
Estas propiedades están respaldadas por objetos BindableProperty
, lo que significa que SearchBar
se puede personalizar y puede ser el destino de los enlaces de datos. Especificar las propiedades de fuente en SearchBar
es coherente con la personalización del texto en otros controles Text de Xamarin.Forms. Para más información, vea Fuentes en Xamarin.Forms.
Crear una SearchBar
En XAML se puede crear una instancia de SearchBar
. Su propiedad Placeholder
opcional se puede establecer para definir el texto de la sugerencia en el cuadro de entrada de consulta. El valor predeterminado de Placeholder
es una cadena vacía, por lo que no aparecerá ningún marcador de posición si no está establecido. En el ejemplo siguiente se muestra cómo crear una instancia de SearchBar
en XAML con el conjunto de propiedades opcional Placeholder
:
<SearchBar Placeholder="Search items..." />
También se puede crear un SearchBar
en código:
SearchBar searchBar = new SearchBar{ Placeholder = "Search items..." };
Propiedades de apariencia de SearchBar
El control SearchBar
define muchas propiedades que personalizan la apariencia del control. En el ejemplo siguiente se muestra cómo crear una instancia de SearchBar
en XAML con varias propiedades especificadas:
<SearchBar Placeholder="Search items..."
CancelButtonColor="Orange"
PlaceholderColor="Orange"
TextColor="Orange"
TextTransform="Lowercase"
HorizontalTextAlignment="Center"
FontSize="Medium"
FontAttributes="Italic" />
Estas propiedades también se pueden especificar al crear un objeto SearchBar
en el código:
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
};
En la captura de pantalla siguiente se muestra el control SearchBar
resultante:
Nota:
En iOS, la clase SearchBarRenderer
contiene un método UpdateCancelButton
que se puede invalidar. Este método controla cuándo aparece el botón Cancelar y se puede invalidar en un representador personalizado. Para más información sobre los representadores personalizados, vea Representadores personalizados de Xamarin.Forms.
Realizar una búsqueda con controladores de eventos
Una búsqueda se puede ejecutar mediante el control SearchBar
adjuntando un controlador de eventos a uno de los eventos siguientes:
SearchButtonPressed
se llama cuando el usuario hace clic en el botón de búsqueda o presiona la tecla Entrar.TextChanged
se llama a cada vez que se cambia el texto del cuadro de consulta.
En el ejemplo siguiente se muestra un controlador de eventos asociado al evento TextChanged
en XAML y se usa una instancia de ListView
para mostrar los resultados de la búsqueda:
<SearchBar TextChanged="OnTextChanged" />
<ListView x:Name="searchResults" >
Un controlador de eventos también se puede adjuntar a una instancia de SearchBar
creada en el código:
SearchBar searchBar = new SearchBar {/*...*/};
searchBar.TextChanged += OnTextChanged;
El controlador de eventos TextChanged
del archivo de código subyacente es el mismo, independientemente de si SearchBar
se ha creado mediante XAML o código:
void OnTextChanged(object sender, EventArgs e)
{
SearchBar searchBar = (SearchBar)sender;
searchResults.ItemsSource = DataService.GetSearchResults(searchBar.Text);
}
El ejemplo anterior implica la existencia de una clase DataService
con un método GetSearchResults
capaz de devolver elementos que coinciden con una consulta. El valor de propiedad Text
del control SearchBar
se pasa al método GetSearchResults
y el resultado se usa para actualizar la propiedad ItemsSource
del control ListView
. El efecto general es que los resultados de la búsqueda se muestran en el control ListView
.
La aplicación de ejemplo proporciona una implementación de la clase DataService
que se puede usar para probar la funcionalidad de búsqueda.
Realizar una búsqueda mediante un modelo de vista
Una búsqueda se puede ejecutar sin controladores de eventos, si se enlazan las propiedades SearchCommand
y SearchCommandParameter
a implementaciones de ICommand
. En el proyecto de ejemplo se muestran estas implementaciones mediante el patrón Modelo-Vista-Modelo de vista (MVVM). Para más información sobre los enlaces de datos con MVVM, vea Enlaces de datos con MVVM.
El modelo de vista de la aplicación de ejemplo contiene el código siguiente:
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();
}
}
}
Nota:
El modelo de vista supone la existencia de una clase DataService
capaz de realizar búsquedas. La clase DataService
, incluidos los datos de ejemplo, está disponible en la aplicación de ejemplo.
En el código XAML siguiente se muestra cómo enlazar un elemento SearchBar
al modelo de vista de ejemplo, con un control ListView
que muestra los resultados de la búsqueda:
<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>
En el ejemplo se establece BindingContext
es una instancia de la clase SearchViewModel
. Enlaza la SearchCommand
propiedad a PerformSearch
ICommand
en el modelo de vista y enlaza la SearchBar
Text
propiedad a la SearchCommandParameter
propiedad . La propiedad ListView.ItemsSource
se enlaza a la propiedad SearchResults
del modelo de vista.
Para más información sobre la interfaz ICommand
y los enlaces, vea Enlace de datos de Xamarin.Forms y la interfaz ICommand.