как использовать listpicker selectionChanged событие в wp7

Являясь новым для Wp7, создавая приложение с помощью ListPicker и используя SelectionChanged событие, чтобы получить выбранную форму данных listPicker, но у меня возникла проблема с событием SelectionChanged , когда я использую это и получаю NullReferenceException , но когда я использовал тот же код в button_Click , который отлично работает и я получаю выделенный текст

мой код c #:

 private void listPicker1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ListPickerItem lpi = (ListPickerItem)listPicker1.SelectedItem;//this code is working in click event
        MessageBox.Show(lpi.Content.ToString());
    }

мой код Xaml


            
                
                    
                        
                    
                
            
            
                
                    
                        
                    
                
            
        

но я хочу получить текстовую форму SelectionChanged событие?

как добиться этого :)

заранее спасибо

2
nl ja de

4 ответы

я также столкнулся с той же проблемой, также получая NullReferenceException

Попробуйте, это отлично работает для меня

1) Если вы используете static ListPickerItems без DataBinding , используйте этот

private void listPicker1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ListPickerItem lpi = (sender as ListPicker).SelectedItem as ListPickerItem;
    MessageBox.Show("selected item is : " + lpi.Content);
}

2) Попробуйте это, если вы используете DataBinding для отправки listPickerItems

 private void listPicker1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
     Countries item = (sender as ListPicker).SelectedItem as Countries;
     MessageBox.Show("Selected Item is : " + item.Country);
}

здесь я предполагаю, что вы подготовили класс Страны с свойством country для taht, который вам нужно набрать в выбранный элемент в категорию Страны, тогда вы получите результат

4
добавлено
Спасибо, это очень полезно. Однако кажется, что событие SelectionChanged запускается при загрузке приложения. Поэтому я использовал эту проверку, если (ListPicker1.SelectedItem! = Null) {поместите свои коды}
добавлено автор Bibaswann Bandyopadhyay, источник

У меня была такая же проблема при использовании события SelectionChanged в моем списке, вот что у меня было:

// My listpicker is LpBluetoothPaired

 private void LpBluetoothPaired_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

         rcvData.Text = LpBluetoothPaired.SelectedItem.ToString();

    }

Но при открытии приложения у него было исключение, поэтому я исправил его:

 private void LpBluetoothPaired_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

       if (LpBluetoothPaired.SelectedItem != null) {
            rcvData.Text = LpBluetoothPaired.SelectedItem.ToString();
        }
    }

это похоже на то, что событие вызывается, когда приложение открывается, но в то время все еще нет selectedItem, поэтому, чтобы избежать исключения и выполнять только текстовое поле rcvData, я проверяю, не является ли оно недействительным

1
добавлено
Это не сработало для меня, однако, когда я использовал SelectedItem.Content.ToString (), он работал
добавлено автор Bibaswann Bandyopadhyay, источник

Иногда срабатывает событие SelectionChanged при установке элемента ItemsSource из кода. Таким образом, в этом случае выбранный элемент может быть нулевым.

Следовательно, добавьте эту строку в свой код SelectionChanged и попробуйте.

private void listPicker1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if(listPicker1.SelectedIndex == -1) //otherwise (listPicker1.SelectedItem == null) also works
    return;
    ListPickerItem lpi = (ListPickerItem)listPicker1.SelectedItem;//this code is working in click event
    MessageBox.Show(lpi.Content.ToString());
}

Если проблема все еще сохраняется, поместите точку останова в обработчик SelectionChanged и наблюдайте значения

0
добавлено
вы можете проверить if (listPicker1.SelectedItem == null) ... Я упомянул об этом и в ответе
добавлено автор nkchandra, источник
покажите свой код ListPicker Xaml также в вопросе, который может дать четкое представление о проблеме
добавлено автор nkchandra, источник
при загрузке страницы Значение SelectedIndex равно 0 не -1 и null, поэтому оператор retutn не exicuted :(
добавлено автор sunny, источник
да, я также проверил с нулевым значением и получаю недопустимое исключение cast для этого ListPickerItem lpi = (ListPickerItem) listPicker1.SelectedItem;
добавлено автор sunny, источник
Я проверил с этим null также ли я получаю недопустимое исключение листинга? где я поступил не так
добавлено автор sunny, источник

Когда данные загружаются в listpicker, он запускает eventchanged event.So для этого поместите свой код в Try-catch и для selectionchanged напишите это:

private void listPicker1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
     try
     {
        Countries SelectedCountries =e.AddedItems[0] as Countries;
        String SelectedCountry = SelectedCountries.Country;
     }
     catch
     {
     }
}
0
добавлено
Про Windows
Про Windows
941 участник(ов)

Microsoft Windows и всё, что с этим связано. Список интересных групп и каналов: https://github.com/goq/telegram-list

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot