0

基本的に、電話から連絡先を取得して、アプリの機能の Listpicker コントロールに表示しようとしています。2 つのリストピッカーがあります。1 つは連絡先リストの名前用で、もう 1 つは選択した連絡先の電話番号のリストを表示します。

これが私のコードです:

//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() イベントは、ページの読み込み時に 1 回だけ呼び出され、連絡先リストを変更してもトリガーされていないと思います。誰でもどこが間違っているのか考えていますか?

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 を 1 回だけ設定する必要があります。

ただし、2011 年 11 月の Toolkit と ListPicker で別の問題が発生する可能性があります。

スレッドで詳細を参照してください。

于 2012-03-06T20:10:06.827 に答える