<syncfusion:SfListView x:Name="listView" AutoFitMode="Height" ItemSpacing="1" ItemsSource="{Binding ContactsInfo}">
<syncfusion:SfListView.ItemTemplate >
<DataTemplate>
<Grid x:Name="grid">
...
<Image Source="{Binding ContactImage}" VerticalOptions="Center" HorizontalOptions="Center" HeightRequest="70" WidthRequest="70">
<Image.GestureRecognizers>
<TapGestureRecognizer Command="{Binding Path=BindingContext.ImageTappedCommand, Source={x:Reference listView}}" CommandParameter="{Binding .}"/>
</Image.GestureRecognizers>
</Image>
<Grid Grid.Column="1" RowSpacing="1" Padding="10,0,0,0" VerticalOptions="Center">
...
</Grid>
</Grid>
<BoxView BackgroundColor="LightGray" HeightRequest="1" Grid.Row="1"/>
</Grid>
</DataTemplate>
</syncfusion:SfListView.ItemTemplate>
</syncfusion:SfListView> |
public class ContactsViewModel : INotifyPropertyChanged
{
public Command<object> ImageTappedCommand { get; set; }
public ContactsViewModel()
{
ImageTappedCommand = new Command<object>(OnImageTapped);
ContactsInfo = new ObservableCollection<Contacts>();
GenerateInfo();
}
private void OnImageTapped(object obj)
{
//You can get the tapped item info from the parameter.
var item = obj as Contacts;
App.Current.MainPage.DisplayAlert("This is " + item.ContactType, "", "Ok");
}
} |
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:ListViewXamarin"
xmlns:syncfusion="clr-namespace:Syncfusion.ListView.XForms;assembly=Syncfusion.SfListView.XForms"
x:Class="ListViewXamarin.MainPage">
...
<ContentPage.Resources>
<ResourceDictionary>
<local:TextColorConverter x:Key="textColorConverter"/>
</ResourceDictionary>
</ContentPage.Resources>
<ContentPage.Content>
<StackLayout>
<syncfusion:SfListView x:Name="listView" AutoFitMode="Height" ItemSpacing="1" ItemsSource="{Binding ContactsInfo}">
<syncfusion:SfListView.ItemTemplate >
<DataTemplate>
<Grid x:Name="grid">
...
<Grid Grid.Column="1" RowSpacing="1" Padding="10,0,0,0" VerticalOptions="Center">
<Label LineBreakMode="NoWrap" TextColor="#474747" Text="{Binding ContactName}"/>
<Label Grid.Row="1" Grid.Column="0" TextColor="#474747" LineBreakMode="NoWrap" Text="{Binding ContactNumber}"/>
<Label Grid.Row="3" Text="{Binding EmailID}" TextColor="{Binding EmailID, Converter={StaticResource textColorConverter}}" HorizontalOptions="StartAndExpand" VerticalOptions="Center"/>
</Grid>
</Grid>
<BoxView BackgroundColor="LightGray" HeightRequest="1" Grid.Row="1"/>
</Grid>
</DataTemplate>
</syncfusion:SfListView.ItemTemplate>
</syncfusion:SfListView>
</StackLayout>
</ContentPage.Content>
</ContentPage> |
public class TextColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var email = (string)value;
return IsValidEmail(email) ? Color.Green : Color.Red;
}
public static bool IsValidEmail(string email)
{
if (string.IsNullOrWhiteSpace(email))
return false;
return Regex.IsMatch(email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$", RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}
} |