Чтобы удовлетворить ваши требования, используйте TapCommand ListView, чтобы обновить значение свойства IsSelected. Привязать свойство IsSelected и преобразователь к элементу «Источник изображения», как показано в следующем фрагменте кода,
Фрагмент кода XAML: Свойство привязки и преобразователь в источник изображения
<ContentPage.Resources>
<ResourceDictionary>
<local:Converter x:Key="converter"/>
</ResourceDictionary>
</ContentPage.Resources>
<syncfusion:SfListView ItemsSource="{Binding bookList}"
x:Name="listView"
ItemSize="60" SelectionMode="Single"
SelectionBackgroundColor="AliceBlue"
AllowKeyboardNavigation="True"
TapCommand="{Binding ItemTappedCommand}">
<syncfusion:SfListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="1" />
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0"
LineBreakMode="NoWrap" Text="{Binding Author}"
VerticalOptions="Center" HorizontalOptions="Start"
FontAttributes="Bold" TextColor="Teal" FontSize="Medium" />
</Grid>
<StackLayout Grid.Row="1" Grid.ColumnSpan="2" BackgroundColor="Gray"
HeightRequest="1"/>
<Image Grid.Column="1" x:Name="selectionImage"
HeightRequest="30" WidthRequest="30"
Source="{Binding IsSelected, Converter={StaticResource converter}}"
HorizontalOptions="End" VerticalOptions="Center"/>
</Grid>
</DataTemplate>
</syncfusion:SfListView.ItemTemplate>
</syncfusion:SfListView>
Фрагмент кода C#: Класс преобразователя
class Converter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool)value ? "Checked.png" : "Unchecked.png";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Фрагмент кода C#: Метод выполнения TapCommand
private Command<object> _itemTappedCommand;
public Command<object> ItemTappedCommand { get => _itemTappedCommand;
set => _itemTappedCommand = value; }
public ViewModel()
{
ItemTappedCommand = new Command<object>(ItemTappedExecute);
}
private void ItemTappedExecute(object obj)
{
bool IsSelected = ((obj as Syncfusion.ListView.XForms.ItemTappedEventArgs).ItemData as BookInfo).IsSelected;
foreach (var item in bookList)
{
item.IsSelected = false;
}
if (IsSelected)
{
((obj as Syncfusion.ListView.XForms.ItemTappedEventArgs).ItemData as BookInfo).IsSelected = false;
}
else
{
((obj as Syncfusion.ListView.XForms.ItemTappedEventArgs).ItemData as BookInfo).IsSelected = true;
}
}