Compartir a través de


EventToCommandBehavior

EventToCommandBehavior es un behavior que permite al usuario invocar a Command a través de un Event. Está diseñado para asociar comandos a eventos expuestos por controles que no se diseñaron para admitir comandos. Permite asignar cualquier evento arbitrario en un control a un comando.

Importante

Los comportamientos del kit de herramientas de la comunidad de .NET MAUI no establecen el BindingContext de un comportamiento, ya que los comportamientos se pueden compartir y aplicar a varios controles a través de estilos. Para obtener más información, consulte Comportamientos de .NET MAUI

Sintaxis

En los ejemplos siguientes se muestra cómo agregar un comportamiento EventToCommandBehavior a un control Button para controlar el evento en el que se hace clic.

XAML

Incluir el espacio de nombres XAML

Para usar el kit de herramientas en XAML, es necesario agregar el siguiente xmlns a la página o vista:

xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"

Por lo tanto, el siguiente:

<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">

</ContentPage>

Se modificaría para incluir el xmlns de la siguiente manera:

<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">

</ContentPage>

Uso de EventToCommandBehavior

El EventToCommandBehavior se puede usar de la siguiente manera en XAML:

<ContentPage 
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
    x:Class="MyLittleApp.MainPage"
    x:Name="Page">
    
    <Button x:Name="MyButton">
        <Button.Behaviors>
            <toolkit:EventToCommandBehavior
                EventName="Clicked"
                BindingContext="{Binding Path=BindingContext, Source={x:Reference MyButton}, x:DataType=Button}"
                Command="{Binding Source={x:Reference Page}, Path=BindingContext.MyCustomCommand, x:DataType=ContentPage}" />
        </Button.Behaviors>
    </Button>
</ContentPage>

C#

El EventToCommandBehavior se puede usar de la siguiente manera en C#:

class EventToCommandBehaviorPage : ContentPage
{
    public EventToCommandBehaviorPage()
    {
        var button = new Button();

        var behavior = new EventToCommandBehavior
        {
            EventName = nameof(Button.Clicked),
            Command = new MyCustomCommand()
        };

        button.Behaviors.Add(behavior);

        Content = entry;
    }
}

Marcado de C#

Nuestro paquete CommunityToolkit.Maui.Markup proporciona una forma mucho más concisa de usar este Behavior en C#.

using CommunityToolkit.Maui.Markup;

class EventToCommandBehaviorPage : ContentPage
{
    public EventToCommandBehaviorPage()
    {
        Content = new Button()
        .Behaviors(new EventToCommandBehavior
        {
            EventName = nameof(Button.Clicked),
            Command = new MyCustomCommand()
        });                 
    }
}

Acceso a EventArgs desde el evento

Es posible pasar el objeto EventArgs del evento específico a Command. Hay dos formas de lograrlo:

1. Uso de la implementación genérica

Al usar la implementación de EventToCommandBehavior<T>, el objeto EventArgs se pasará a la propiedad Command si no se establecen las propiedades CommandParameter y Converter. Para hacer referencia al tipo genérico en XAML, es necesario usar la directiva x:TypeArguments.

En el ejemplo siguiente se muestra cómo usar la implementación genérica para pasar WebNavigatedEventArgs al comando.

<WebView 
    Source="https://github.com"
    x:Name="MyWebView">
    <WebView.Behaviors>
        <toolkit:EventToCommandBehavior
            x:TypeArguments="WebNavigatedEventArgs"
            EventName="Navigated"
            BindingContext="{Binding Path=BindingContext, Source={x:Reference MyWebView}, x:DataType=WebView}"
            Command="{Binding WebViewNavigatedCommand}" />
    </WebView.Behaviors>
</WebView>

2. Uso de la propiedad Converter

Al usar este comportamiento (behavior) con eventos de selección o pulsación expuestos por ListView, se requiere un convertidor adicional. Este convertidor convierte los argumentos de evento en un parámetro de comando que, posteriormente, se pasa al comando (Command). También están disponibles en el kit de herramientas de la comunidad de .NET MAUI:

Propiedades

Propiedad Tipo Descripción
EventName string El nombre del evento que se debe asociar a un elemento Command.
Get-Help ICommand El elemento Command que se debe ejecutar.
CommandParameter object Un parámetro opcional para reenviar al elemento Command.
EventArgsConverter IValueConverter Un elemento IValueConverter opcional que se puede usar para convertir los valores de EventArgs en valores pasados al comando (Command).

Ejemplos

Puede encontrar un ejemplo de este comportamiento en acción en la Aplicación de muestra del kit de herramientas de la comunidad de .NET MAUI.

API

Puede encontrar el código fuente de EventToCommandBehavior en el repositorio de GitHub del Kit de herramientas de la comunidad de .NET MAUI.