EventToCommandBehavior

Das EventToCommandBehavior ist eine behavior, die es dem Benutzer ermöglicht, eine Command über eine Event aufzurufen. Sie wurde entwickelt, um Befehle Ereignissen zuzuordnen, die von Steuerelementen verfügbar gemacht wurden, die nicht zur Unterstützung von Befehlen entwickelt wurden. Damit können Sie beliebige Ereignisse in einem Steuerelement einem Befehl zuordnen.

Important

Die .NET MAUI Community Toolkit Behaviors legen die BindingContext eines Verhaltens nicht fest, da Verhaltensweisen über Stile freigegeben und auf mehrere Steuerelemente angewendet werden können. Weitere Informationen finden Sie unter .NET MAUI Behaviors

Syntax

Die folgenden Beispiele zeigen, wie Sie einem Button-Steuerelement ein EventToCommandBehavior hinzufügen und anschließend das Click-Ereignis behandeln.

XAML

Einbinden des XAML-Namespace

Um das Toolkit in XAML verwenden zu können, muss der folgende xmlns-Abschnitt zu Ihrer Seite oder Ansicht hinzugefügt werden:

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

Daher das Folgende:

<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>

Würde geändert werden, um das xmlns wie folgt einzubinden:

<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>

Verwenden von EventToCommandBehavior

Dies EventToCommandBehavior kann wie folgt in XAML verwendet werden:

<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#

Dies EventToCommandBehavior kann wie folgt in C# verwendet werden:

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;
    }
}

C#-Markup

Unser CommunityToolkit.Maui.Markup Paket bietet eine viel präzisere Möglichkeit, dies Behavior in C# zu verwenden.

using CommunityToolkit.Maui.Markup;

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

Zugriff auf die EventArgs aus dem Ereignis

Es ist möglich, das EventArgs des spezifischen Ereignisses in die Command zu übergeben. Es gibt zwei Möglichkeiten, dies zu erreichen:

1. Verwenden der generischen Implementierung

Durch die Verwendung der EventToCommandBehavior<T>-Implementierung wird EventArgs an die Command-Eigenschaft übergeben, wenn weder die CommandParameter- noch die Converter-Eigenschaft festgelegt sind. Um auf den generischen Typ in XAML zu verweisen, müssen wir die x:TypeArguments Direktive verwenden.

Das folgende Beispiel zeigt, wie Sie die generische Implementierung verwenden, um WebNavigatedEventArgs an den Befehl zu übergeben.

<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. Verwenden der Converter-Eigenschaft

Wenn Sie dieses behavior mit den von ListView bereitgestellten Auswahl- oder Tippen-Ereignissen verwenden, ist ein zusätzlicher Konverter erforderlich. Dieser Konverter wandelt die Ereignisargumente in einen Befehlsparameter um, der dann an den Command übergeben wird. Sie sind auch im .NET MAUI Community Toolkit verfügbar:

Eigenschaften

Eigentum Typ Beschreibung
Ereignisname Schnur Der Name des Ereignisses, das einem Command zugeordnet werden sollte.
Command ICommand Das Command, das ausgeführt werden soll.
CommandParameter Objekt Ein optionaler Parameter zum Weiterleiten an die Command.
EventArgsConverter IValueConverter Ein optionales IValueConverter, das verwendet werden kann, um EventArgs-Werte in Werte zu konvertieren, die an Command übergeben werden.

Beispiele

Sie finden ein Beispiel für dieses Verhalten in Aktion in der .NET MAUI Community Toolkit-Beispielanwendung.

API

Sie finden den Quellcode für EventToCommandBehavior im .NET MAUI Community Toolkit GitHub Repository.