Windows phone 8 在mvvm light windows phone 8.1通用应用程序中访问ViewModel中的ContactStore
是否有方法访问ViewModel类中的Windows.ApplicationModel.Contacts.ContactStore 以下代码可以在代码隐藏文件(即.xaml.cs)中访问,但不能在共享零件的ViewModel中访问,在ViewModel.cs的行下方,缺少使用指令或程序集引用。但我可以从ViewModel访问Contacts和ContactManagerWindows 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
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