Создал настраиваемый элемент управления и добавил его в ListView в Xamarin. Но он сработал только при двойном щелчке. Я хочу, чтобы ItemTapped запускался одним щелчком мыши - PullRequest
0 голосов
/ 28 мая 2020

Я создал пользовательский объект ViewCell в моем проекте Xamarin. У меня нет специального кода программной части. У меня есть ViewModel, которая является BindableBase. Он просто принимает значения, которые мне нужны для моего контроля.

Вот пользовательский элемент управления. В конце концов, мне просто нужно получить строку, хранящуюся в ViewModel, когда она нажата, чтобы я мог перемещаться.

<?xml version="1.0" encoding="utf-8" ?>
<ViewCell xmlns="http://xamarin.com/schemas/2014/forms" 
          xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
          xmlns:controls="clr-namespace:PhantomLib.CustomControls;assembly=PhantomLib"
          xmlns:extensions="clr-namespace:PhantomLib.Extensions;assembly=PhantomLib"
          x:Class="Fulfillment.UI.StoreSelection.StoreCell">
    <controls:RoundedFrame Style="{StaticResource RoundedFramePrimary}" extensions:Views.TapBackgroundColor="{DynamicResource LightishGrey}">
        <StackLayout Orientation="Horizontal" VerticalOptions="Center">
            <Label Text="{Binding StoreLabel}" Style="{StaticResource TitleLeftBlack}" VerticalOptions="Center" HorizontalOptions="StartAndExpand"/>
            <Image Source="icon_forward" HorizontalOptions="EndAndExpand" Style="{StaticResource ArrowImageStyle}"/>
        </StackLayout>
        <controls:RoundedFrame.Resources>
            <ResourceDictionary>
                <Style x:Key="ArrowImageStyle" TargetType="Image">
                    <Setter Property="Margin" Value="16" />
                </Style>
                <Style x:Key="RoundedFramePrimary" TargetType="controls:RoundedFrame">
                    <Setter Property="CornerRadius" Value="10"/>
                    <Setter Property="RoundTopLeft" Value="true"/>
                    <Setter Property="RoundBottomLeft" Value="true"/>
                    <Setter Property="BackgroundColor"  Value="{DynamicResource White}"/>
                    <Setter Property="HeightRequest" Value="80" />
                    <Setter Property="Margin" Value="50,0,0,15"/>
                    <Setter Property="Padding" Value="0" />
                </Style>
            </ResourceDictionary>
        </controls:RoundedFrame.Resources>
    </controls:RoundedFrame>
</ViewCell>

На моей главной странице у меня есть следующий ListView

        <ListView x:Name="StoreList" IsPullToRefreshEnabled="false" HasUnevenRows="True"
            ItemsSource="{Binding StoreItems}" CachingStrategy="RecycleElement" SeparatorVisibility="None"
            SelectionMode="None" ItemTemplate="{StaticResource storeItemTemplate}">
            <ListView.Behaviors>
                <behavior:EventToCommandBehavior EventName="ItemTapped" Command="{Binding StoreTappedCommand}"  Converter="{StaticResource TappedItemConverter}"/>
            </ListView.Behaviors>

Затем в ViewModel для страницы я добавляю свои элементы со следующим кодом

    List<string> stores = _settings.GetStores();

    foreach (string store in stores)
    {
        StoreCellViewModel tempStore = new StoreCellViewModel(store);

        StoreItems.Add(tempStore);
    }

Кажется, я не могу найти причину, по которой мне потребовалось бы дважды щелкнуть элемент в ListView, чтобы запустить StoreTappedCommand.

...