Reputation: 59
I am a beginner in Xamarin Platform, & trying to read contacts in xamarin forms. Even tried using Xamarin.Mobile, But it gives lots of error. Found 1 more plugin i.e. Xamarin.contacts https://github.com/jamesmontemagno/Xamarin.Plugins/tree/master/Contacts but no relevant example is given. Please help with a relevant example using Xamarin.contacts for all 3 platforms Thanks in advance :)
Upvotes: 4
Views: 4816
Reputation: 191
Just keep in mind Xam.Plugin.Contacts is currently in alpha version.
This is my implementation. Notice despite of class names, it is not a real MVVM pattern. I simplified the code as much as I could to help readability.
MainPage.xaml
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Contacts"
x:Class="Contacts.MainPage">
<ContentPage.BindingContext>
<local:MainViewModel x:Name="ViewModel" />
</ContentPage.BindingContext>
<ListView ItemsSource="{ Binding Contacts }">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{ Binding DisplayName }"
Detail="{ Binding Nickname }" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
MainViewModel.cs
public class MainViewModel
{
public ObservableCollection<Plugin.Contacts.Abstractions.Contact> Contacts { get; private set; }
public MainViewModel()
{
this.Contacts = new ObservableCollection<Plugin.Contacts.Abstractions.Contact>();
ReloadContacts();
}
public void ReloadContacts()
{
// Device may request user permission to get contacts access.
var hasPermission = CrossContacts.Current.RequestPermission()
.GetAwaiter()
.GetResult();
if (hasPermission)
{
this.Contacts.Clear();
List<Plugin.Contacts.Abstractions.Contact> contacts = null;
CrossContacts.Current.PreferContactAggregation = false;
if (CrossContacts.Current.Contacts == null)
{
return;
}
contacts = CrossContacts.Current.Contacts.ToList();
foreach (var contact in contacts)
{
this.Contacts.Add(contact);
}
}
}
}
Hope this helps.
Upvotes: 3