2

Wp7を初めて使用し、イベントをListPicker使用してアプリを開発し、listPickerSelectionChangedから選択したデータを取得しますが、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コードは

<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

4 に答える 4

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ください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選択したアイテムを国のクラスにtypeCastする必要があると想定しています。その後、結果が得られるのはあなただけです。

于 2013-02-08T07:08:29.690 に答える
1

リストピッカーで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 textBoxのみを満たすために、nullでないかどうかを確認します。

于 2014-01-03T00:47:03.523 に答える
0

コードビハインドからItemsSourceを設定すると、SelectionChangedイベントが発生することがあります。したがって、このような場合、selectedItemはnullになる可能性があります。

したがって、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ハンドラーにブレークポイントを配置し、値を確認します

于 2013-01-29T08:14:23.987 に答える
0

データがリストピッカーにロードされると、selectionchangedイベントが発生します。そのため、コードをTry-catchに入れ、selectionchangedの場合は次のように記述します。

private void listPicker1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
     try
     {
        Countries SelectedCountries =e.AddedItems[0] as Countries;
        String SelectedCountry = SelectedCountries.Country;
     }
     catch
     {
     }
}
于 2013-05-20T09:15:35.820 に答える