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

Windows phone 7 无法在Wp7 Listpicker控件中显示所选项目,windows-phone-7,listpicker,Windows Phone 7,Listpicker,基本上,我正在尝试从手机中提取联系人,并将其显示在我的应用程序中的Listpicker控件中。我有两个列表选择器,一个用于联系人列表的名称,另一个用于显示所选联系人的电话号码列表 这是我的密码: //Declarations ContactsSearchEventArgs e1; String SelectedName; String SelectedNumber; List<string> contacts = new List<string>(); List<

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

这是我的密码:

//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();

    }
//声明
联系人SEARCHEVENTARGS e1;
字符串SelectedName;
字符串SelectedNumber;
列表联系人=新列表();
List phnum=新列表();
public AddressBook()//构造函数
{
初始化组件();
联系人=新联系人();
contacts.SearchCompleted+=新事件处理程序(contacts\u SearchCompleted);
SearchAsync(string.Empty,FilterKind.None,null);
}
无效联系人搜索已完成(对象发件人、联系人搜索目标e)
{          
e1=e;
foreach(e.Results中的var结果)
{        
if(result.PhoneNumbers.Count()!=0)
{
contacts.Add(result.DisplayName.ToString());
}                      
}
Namelist.ItemsSource=联系人;
}
私有无效名称列表\u SelectionChanged(对象发送者,SelectionChangedEventArgs e)
{
SelectedName=(发送方作为列表选择器)。SelectedItem.ToString();
phnum.Clear();
foreach(e1中的var结果。结果)
{
if(SelectedName==result.DisplayName)
{
Add(result.PhoneNumbers.FirstOrDefault().ToString());
}
}
Numbers.ItemsSource=phnum;
}
私有无效编号\u选择已更改(对象发送者,选择已更改已更改)
{
SelectedNumber=(发送方作为列表选择器)。SelectedItem.ToString();
}
我可以在Listpicker后台用所选姓名的电话号码填充Numberlist,但号码没有显示在前面。我认为当页面加载时,Numbers_SelectionChanged()事件只被调用一次,而当我更改联系人列表时,没有看到它被触发。有人知道我哪里出了问题吗?

如果你改变了
列表
observedcollection
这应该行得通

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

但您可能会遇到2011年11月工具包和ListPicker的另一个问题

请参阅详细信息。

私有无效名称列表\u选择已更改(对象发送者,选择已更改已更改)
{  
SelectedName=(发送方作为列表选择器)。SelectedItem.ToString();
phnum=new List();//已更改为phnum.Clear()
foreach(e1中的var结果。结果)
{
if(SelectedName==result.DisplayName)
{
Add(result.PhoneNumbers.FirstOrDefault().ToString());
}
}
Numbers.ItemsSource=phnum;
}

这很有效!!。调试时,我发现它的phnum.Clear()有问题。因此,我想为所选联系人创建一个新的phnum list实例。

谢谢您的回复。我也试过用ObservableCollection,但还是一样。另外,我不认为2011年11月的Listpicker问题是这样的,因为它在其他页面上运行良好。这不起作用,因为他没有在ItemsSource和集合之间创建绑定。
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;            
}