Category / Section
How to show or hide drag indicator based on the DragStartMode in Xamarin.Forms ListView (SfListView)
1 min read
You can handle the DragIndicatorView visibility based on DragStartMode by using the converter in the Xamarin.Forms SfListView.
XAML
Set the converter to the IsVisible property of DragIndicatorView.
<syncfusion:SfListView x:Name="listView" Grid.Row="1" ItemSize="60" BackgroundColor="#FFE8E8EC" GroupHeaderSize="50" ItemsSource="{Binding ToDoList}" DragStartMode="OnHold" SelectionMode="None">
<syncfusion:SfListView.ItemTemplate>
<DataTemplate>
<Frame HasShadow="True" BackgroundColor="White" Padding="0">
<Frame.InputTransparent>
<OnPlatform x:TypeArguments="x:Boolean" Android="True" WinPhone="False" iOS="False"/>
</Frame.InputTransparent>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="60" />
</Grid.ColumnDefinitions>
<Label x:Name="textLabel" Text="{Binding Name}" FontSize="15" TextColor="#333333" VerticalOptions="Center" HorizontalOptions="Start" Margin="5,0,0,0" />
<syncfusion:DragIndicatorView Grid.Column="1" ListView="{x:Reference listView}" HorizontalOptions="Center" VerticalOptions="Center" IsVisible="{Binding DragStartMode, Source={x:Reference listView},Converter={StaticResource dragValueConverter}}">
<Grid Padding="10, 20, 20, 20">
<Image Source="DragIndicator.png" VerticalOptions="Center" HorizontalOptions="Center" />
</Grid>
</syncfusion:DragIndicatorView>
</Grid>
</Frame>
</DataTemplate>
</syncfusion:SfListView.ItemTemplate>
</syncfusion:SfListView>
C#
Converter to return true or false based on the DragStartMode.
namespace ListViewXamarin
{
public class DragValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var dragMode = (DragStartMode)value;
if (dragMode == DragStartMode.OnHold || dragMode == DragStartMode.OnDragIndicator)
return true;
else
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}