Доступ к ContactStore в ViewModel в универсальном приложении mvvm light для Windows Phone 8.1

Есть ли способ получить доступ к Windows.ApplicationModel.Contacts.ContactStore в классе ViewModel?

следующий код доступен в коде позади файла, т. е. .xaml.cs, но не в ViewModel, который находится в общей части, ниже строки в viewmodel.cs говорится, что Udefined ContactStore отсутствует, используя директиву или ссылку на сборку. Но я могу получить доступ к контактам и ContactManager из ViewModel.

ContactStore contactStore = await ContactManager.RequestStoreAsync();

person Muhammad Saifullah    schedule 30.04.2014    source источник


Ответы (2)


Обычно вы хотите обернуть это каким-то RepositoryService. Это может быть IContactManagerService. Который будет передан в viewmodel или введен через DI. Внедрение службы будет содержать асинхронные методы для получения контактов и зависит от вашего класса ContactManager.

это делает ContractStore заменяемым, потому что он не связан.

ХТН

person silverfighter    schedule 30.04.2014

Получил решение! поскольку общий проект предназначен как для приложения Windows, так и для телефона Windows. Раньше я думал, что ContactStore подходит для обоих, но проверял msdn оказалось, что он доступен только для Windows Phone 8.1. Поэтому я применил директиву Windows phone к своему общему проекту. вот как

    #if WINDOWS_PHONE_APP

     ContactStore contactStore = await ContactManager.RequestStoreAsync();

        IReadOnlyList<Contact> contacts = null;
        // Find all contacts
            contacts = await contactStore.FindContactsAsync();

            foreach (var item in contacts)
            {
                if (!string.IsNullOrEmpty(item.FirstName) && !string.IsNullOrEmpty(item.LastName))
                {
                    var acontact = new Contact() { Name = item.FirstName + " " + item.MiddleName + " " + item.LastName, };
                    if (item.Thumbnail != null)
                    {
                        var thumnailStream = await item.Thumbnail.OpenReadAsync();
                        BitmapImage thumbImage = new BitmapImage();
                        thumbImage.SetSource(thumnailStream);
                    }
                    myContactsList.Add(acontact);
                }
            }
      #else
        //do windows phone logic here
      #endif
person Muhammad Saifullah    schedule 12.08.2014