无法在Wp7 Listpicker控件中显示所选项目

时间:2012-03-06 18:23:15

标签: windows-phone-7 listpicker

基本上我正试图从手机中提取联系人并在Listpicker控件中显示我的应用中的功能。我有两个Listpickers,一个用于联系人列表名称,另一个显示所选联系人的phonenumbers列表。

这是我的代码:

//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背景中使用所选名称的phonenumbers填充Numberlist,但该数字未显示在前面。我认为Numbers_SelectionChanged()事件只在页面加载时被调用一次,并且在我更改联系人列表时没有看到它被触发。任何人都知道哪里出错了?

2 个答案:

答案 0 :(得分:1)

如果你改变了      List<string> 至      ObservableCollection<string> 这应该有效。

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

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

查看更多in thread

答案 1 :(得分: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列表实例。

相关问题