0

虽然这已经在 StackOverflow 上发布过,但我认为这些都没有反映我的问题,而且这些解决方案也没有对我有用。所以我正在开发一个 Windows Phone 应用程序,我的工作流程有点像这样:

  • 应用程序启动
  • ContactPicker 打开
  • 用户选择一个或多个联系人
  • 根据他选择的联系人数量,将许多 PivotItem 添加到 Pivot 中。

我的代码如下:

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        // TODO: Prepare page for display here.

        // TODO: If your application contains multiple pages, ensure that you are
        // handling the hardware Back button by registering for the
        // Windows.Phone.UI.Input.HardwareButtons.BackPressed event.
        // If you are using the NavigationHelper provided by some templates,
        // this event is handled for you.

        SelectContacts();
    }

    private async Task SelectContacts()
    {
        var picker = new ContactPicker();
        picker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);

        ContactsList = (List<Contact>)await picker.PickContactsAsync();
        DisplayContacts();
    }

    private void DisplayContacts()
    {
        if (ContactsList != null)
        {
            foreach (var item in ContactsList)
            {
                PivotItem pivotItem = new PivotItem();
                pivotItem.Header = item.FirstName.ToString();

                ContentRoot.Items.Add(pivotItem);
            }
        }
    }

据我说,在 SelectContacts() 方法中,应用程序应该等待 await 调用,一旦它返回联系人列表,它应该执行 DisplayContacts() 方法但它不起作用。我已经尝试了此代码的多种其他变体,但它们也不起作用。

4

2 回答 2

1

等待 SelectContacts() 方法并在其下方添加 DisplayContacts() 方法。从 SelectContacts() 中删除 DisplayContacts() 方法

await SelectContacts();
DisplayContacts();
于 2015-02-07T05:02:36.210 回答
0

我不知道完整的原因,但我发现因为我在 OnNavigatedTo() 事件中进行了 PickContactsAsync() 调用,这就是它没有按预期工作的原因。一旦我将 PickContactsAsync() 调用移到 PageLoaded() 事件处理程序中,它就开始照常工作。

于 2015-02-11T17:04:14.123 回答