Windows phone 8 在mvvm light windows phone 8.1通用应用程序中访问ViewModel中的ContactStore

Windows phone 8 在mvvm light windows phone 8.1通用应用程序中访问ViewModel中的ContactStore,windows-phone-8,mvvm,windows-phone,mvvm-light,windows-phone-8.1,Windows Phone 8,Mvvm,Windows Phone,Mvvm Light,Windows Phone 8.1,是否有方法访问ViewModel类中的Windows.ApplicationModel.Contacts.ContactStore 以下代码可以在代码隐藏文件(即.xaml.cs)中访问,但不能在共享零件的ViewModel中访问,在ViewModel.cs的行下方,缺少使用指令或程序集引用。但我可以从ViewModel访问Contacts和ContactManager ContactStore contactStore = await ContactManager.RequestStoreAs

是否有方法访问ViewModel类中的Windows.ApplicationModel.Contacts.ContactStore

以下代码可以在代码隐藏文件(即.xaml.cs)中访问,但不能在共享零件的ViewModel中访问,在ViewModel.cs的行下方,缺少使用指令或程序集引用。但我可以从ViewModel访问Contacts和ContactManager

ContactStore contactStore = await ContactManager.RequestStoreAsync();

通常,您希望将其包装在某种RepositoryService中。这可能是IContactManagerService。将被传递到viewmodel或通过DI注入。 该服务的实现将包含用于检索联系人的异步方法,并且依赖于您的ContactManager类

这使得ContractStore是可交换的,因为它是解耦的


得到了解决方案!因为共享项目适用于windows应用程序和windows phone。以前我认为ContactStore适用于这两种应用程序,但检查后发现它似乎只适用于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