在mvvm light windows phone 8.1 universal app中访问ViewModel中的ContactStore

时间:2014-04-30 11:19:00

标签: windows-phone-8 mvvm windows-phone mvvm-light windows-phone-8.1

有没有办法在ViewModel类中访问Windows.ApplicationModel.Contacts.ContactStore?

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

ContactStore contactStore = await ContactManager.RequestStoreAsync();

2 个答案:

答案 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