ItemTappedEventArgsConverter

ItemTappedEventArgsConverter 是一种转换器,允许用户从 ItemTappedEventArgs 对象中提取 Item 值。 它随后可与 EventToCommandBehavior 结合使用。

BaseConverter 属性

以下属性是在基类 public abstract class BaseConverter 中实现的:

properties 说明
DefaultConvertReturnValue IValueConverter.Convert(object?, Type, object?, CultureInfo?) 引发 Exception 时返回的默认值。 当 CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConverters 设置为 true 时,将使用此值。
DefaultConvertBackReturnValue IValueConverter.ConvertBack(object?, Type, object?, CultureInfo?) 引发 Exception 时返回的默认值。 当 CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConverters 设置为 true 时,将使用此值。

ICommunityToolkitValueConverter 属性

以下属性在 public interface ICommunityToolkitValueConverter 中实现:

properties 类型​​ 描述
DefaultConvertReturnValue object? IValueConverter.Convert(object?, Type, object?, CultureInfo?) 引发 Exception 时返回的默认值。 当 CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConverters 设置为 true 时,将使用此值。
DefaultConvertBackReturnValue object? IValueConverter.ConvertBack(object?, Type, object?, CultureInfo?) 引发 Exception 时返回的默认值。 当 CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConverters 设置为 true 时,将使用此值。

语法

XAML

包括 XAML 命名空间

若要在 XAML 中使用工具包,需要将以下 xmlns 添加到页面或视图中:

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

因此,以下内容:

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

将被修改为包括 xmlns,如下所示:

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

使用 ItemTappedEventArgsConverter

ItemTappedEventArgsConverter 可以在 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">
    <ContentPage.Resources>
         <ResourceDictionary>
             <toolkit:ItemTappedEventArgsConverter x:Key="ItemTappedEventArgsConverter" />
         </ResourceDictionary>
    </ContentPage.Resources>

    <VerticalStackLayout Padding="10">

        <Label
            Text="The ItemTappedEventArgsConverter is a converter that allows users to extract the Item value from an ItemTappedEventArgs object. It can subsequently be used in combination with EventToCommandBehavior."
            TextColor="{StaticResource NormalLabelTextColor}"
            Margin="0, 0, 0, 20" />

        <ListView
            BackgroundColor="Transparent"
            ItemsSource="{Binding Items}"
            SelectedItem="{Binding ItemSelected, Mode=TwoWay}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <VerticalStackLayout Margin="6">
                            <Label Text="{Binding Name, StringFormat='Name: {0}'}"/>
                        </VerticalStackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
            <ListView.Behaviors>
                <toolkit:EventToCommandBehavior EventName="ItemTapped"
                                                Command="{Binding ItemTappedCommand}"
                                                EventArgsConverter="{StaticResource ItemTappedEventArgsConverter}" />
            </ListView.Behaviors>
        </ListView>
    </VerticalStackLayout>
</ContentPage>

C#

ItemTappedEventArgsConverter 可在 C# 中按如下所示方式使用:

class ItemTappedEventArgsConverterPage : ContentPage
{
    public ItemTappedEventArgsConverterPage()
    {
        var behavior = new EventToCommandBehavior
        {
            EventName = nameof(ListView.ItemTapped),
            EventArgsConverter = new ItemTappedEventArgsConverter()
        };
        behavior.SetBinding(EventToCommandBehavior.CommandProperty, static (ViewModel vm) => vm.ItemTappedCommand);

        var listView = new ListView 
        { 
            HasUnevenRows = true 
        };
        listView.SetBinding(ListView.ItemsSource, static (ViewModel vm) => vm .Items);
        listView.Behaviors.Add(behavior);

        Content = listView;
    }
}

C# 标记

我们的 CommunityToolkit.Maui.Markup 包提供了在 C# 中使用此转换器的更简洁的方法。

using CommunityToolkit.Maui.Markup;

class ItemTappedEventArgsConverterPage : ContentPage
{
    public ItemTappedEventArgsConverterPage()
    {
        Content = new ListView
        {
            HasUnevenRows = true
        }
        .Bind(
            ListView.ItemsSourceProperty,
            static (ViewModel vm) => vm.Items)
        .Behaviors(
            new EventToCommandBehavior
            {
                EventName = nameof(ListView.ItemTapped),
                EventArgsConverter = new ItemTappedEventArgsConverter()
            }
            .Bind(
                EventToCommandBehavior.CommandProperty, 
                static (ViewModel vm) => vm.ItemTappedCommand,
                mode: BindingMode.OneTime));
    }
}

示例

可以在 .NET MAUI 社区工具包示例应用程序中找到此转换器的示例。

API

可以在 .NET MAUI 社区工具包 GitHub 存储库查看ItemTappedEventArgsConverter 的源代码