0

基本上,我正在尝试从手机中提取联系人并将它们显示在 Listpicker 控件中,以获取我应用程序中的一项功能。我有两个 Listpickers,一个用于联系人列表的名称,另一个显示所选联系人的电话号码列表。

这是我的代码:

//Declarations

ContactsSearchEventArgs e1;
String SelectedName;
String SelectedNumber;
List<string> contacts = new List<string>();
List<string> phnum = new List<string>();


 public AddressBook() // Constructor 
    {
        InitializeComponent();
        Contacts contacts = new Contacts();
        contacts.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(contacts_SearchCompleted);
        contacts.SearchAsync(string.Empty,FilterKind.None,null);            
    }

 void contacts_SearchCompleted(object sender, ContactsSearchEventArgs e) 
    {          
       e1 = e;

            foreach (var result in e.Results)
            {        

                if (result.PhoneNumbers.Count() != 0)
                {

                    contacts.Add(result.DisplayName.ToString());
                }                      

            }

        Namelist.ItemsSource = contacts; 

    }

 private void Namelist_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        SelectedName = (sender as ListPicker).SelectedItem.ToString();
        phnum.Clear();            
        foreach (var result in e1.Results)
        {
            if (SelectedName == result.DisplayName)
            {

                phnum.Add(result.PhoneNumbers.FirstOrDefault().ToString());

            }
        }

        Numbers.ItemsSource = phnum;            
    }

private void Numbers_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

        SelectedNumber = (sender as ListPicker).SelectedItem.ToString();

    }

我能够在 Listpicker 背景中使用所选名称的电话号码填充 Numberlist,但该号码未显示在前面。我认为 Numbers_SelectionChanged() 事件仅在页面加载时调用一次,并且在我更改联系人列表时没有看到它被触发。任何人都知道哪里出错了?

4

2 回答 2

1
private void Namelist_SelectionChanged(object sender, SelectionChangedEventArgs e)
{  
    SelectedName = (sender as ListPicker).SelectedItem.ToString();
    phnum =  new List<string>();   // Changed instead of phnum.Clear()            
    foreach (var result in e1.Results)
    {
        if (SelectedName == result.DisplayName)
        {

            phnum.Add(result.PhoneNumbers.FirstOrDefault().ToString());

        }
    }

    Numbers.ItemsSource = phnum;            
}

这有效!在调试时我发现它的 phnum.Clear() 有问题。所以我想为选定的联系人创建一个新的 phnum 列表实例。

于 2012-03-07T16:08:38.487 回答
1

如果你改变 List<string>ObservableCollection<string> 应该工作。

此外,您只需在 Xaml 或您的构造函数中设置 ItemSource 一次。

但是您可能会遇到 2011 年 11 月的 Toolkit 和 ListPicker 的另一个问题。

在线程中查看更多信息。

于 2012-03-06T20:10:06.827 回答