Я создал пользовательский объект 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.