2013-01-29 2 views
2

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

мой 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 код

<toolkit:ListPicker x:Name="listPicker1" Grid.Row="0" ExpansionMode="ExpansionAllowed" SelectionChanged="listPickerCountryLogin_SelectionChanged" HorizontalAlignment="Left" Margin="14,43,0,0" VerticalAlignment="Top" Width="436" FullModeHeader="Select Country" Background="White" BorderBrush="White"> 
      <toolkit:ListPicker.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding Country}" Width="250" /> 
        </StackPanel> 
       </DataTemplate> 
      </toolkit:ListPicker.ItemTemplate> 
      <toolkit:ListPicker.FullModeItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding Country}" Width="300" Margin="0,0,0,20" FontSize="44"/> 
        </StackPanel> 
       </DataTemplate> 
      </toolkit:ListPicker.FullModeItemTemplate> 
     </toolkit:ListPicker> 

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

как для того чтобы достигнуть этого :)

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

ответ

4

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

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

1) Если вы используете статические 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 для Dispaly в listPickerItems

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

здесь я предполагаю, что вы подготовили класс Countries с country недвижимости для TAHT вам необходимо приведение к выбранной позиции в классе стран, то только вы получаете результат

+0

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

0

Иногда 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

при загрузке на страницу значения 'SelectedIndex' установлено в 0 не -1 и null, поэтому инструкция retutn не отображается :( – sunny

+0

вы можете проверьте (listPicker1.SelectedItem == null) ... Я упомянул об этом также и в ответе – nkchandra

+0

Да, я также проверял значение null и получаю недопустимое исключение для исключения для этого списка ListPickerItem lpi = (ListPickerItem)Picker1.SelectedItem; ' – sunny

0

Когда данные загружаются в listpicker, он запускает событие selectedchanged.Так что для этого поставить свой код в Try прилове и для SelectionChanged пишет это:

private void listPicker1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    try 
    { 
     Countries SelectedCountries =e.AddedItems[0] as Countries; 
     String SelectedCountry = SelectedCountries.Country; 
    } 
    catch 
    { 
    } 
} 
1

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

// 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, поэтому в о rder, чтобы избежать исключения и выполнить только текст rcvData textBox. Я проверяю, не является ли оно isn''t null

+0

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

Смежные вопросы