基本上我正试图从手机中提取联系人并在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()事件只在页面加载时被调用一次,并且在我更改联系人列表时没有看到它被触发。任何人都知道哪里出错了?
答案 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列表实例。