有没有办法在ViewModel类中访问Windows.ApplicationModel.Contacts.ContactStore?
以下代码可以在代码隐藏文件(即.xaml.cs)中访问,但不能在共享部分的ViewModel中访问,viewmodel.cs中的行下面显示Udefined ContactStore,缺少使用指令或程序集引用。但我可以从ViewModel访问Contacts和ContactManager。
ContactStore contactStore = await ContactManager.RequestStoreAsync();
答案 0 :(得分:0)
通常你想把它包装在某种RepositoryService
中。这可能是IContactManagerService
。哪个将被传递到viewmodel
或通过DI注入。
该服务的实现将包含用于检索联系人的异步方法,并且依赖于您的ContactManager类。
这使得ContractStore
可以交换,因为它是分离的。
HTH
答案 1 :(得分:0)
得到了解决方案!共享项目适用于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