ListPicker SelectionChanged事件在导航期间多次调用

时间:2013-12-15 07:34:45

标签: c# xaml windows-phone-7 windows-phone-8 listpicker

我的一个应用程序页面中的ListPicker中有一个SelectionChanged事件,该页面在加载页面之前会多次触发。这对我来说真的很不方便,因为当选择一个项目时,会显示一个MessageBox(并且将执行其他操作)。每次页面NavigatedTo时,MessageBox都会显示两次。我该如何解决这个问题?

XAML

<toolkit:ListPicker x:Name="ThemeListPicker" Header="Theme"
                    ItemTemplate="{StaticResource PickerItemTemplate}" 
                    SelectionChanged="ThemeListPicker_SelectionChanged"/>

XAML.CS

private void ThemeListPicker_SelectionChanged(object sender,
                                              SelectionChangedEventArgs e)
{
   if(ThemeListPicker.SelectedIndex != -1)
   {
       var theme = (sender as ListPicker).SelectedItem;

       if (index == 0)
       {
          Settings.LightTheme.Value = true;
          MessageBox.Show("light");
       }
       else
       {
           Settings.LightTheme.Value = false;
           MessageBox.Show("dark");
       }
   }                            
}

2 个答案:

答案 0 :(得分:0)

好吧,这就是listpicker的行为方式,你可以做的最好的事情是让ThemeListPicker_SelectionChanged在datatemplate中创建一个父堆栈面,就像这样

<Listpicker.ItemTemplate>
<DataTemplate x:Name="PickerItemTemplate"> 
               <StackPanel tap="stk_Tap"> 
                    <TextBlock/> 
                </StackPanel> 
            </DataTemplate>
</Listpicker.ItemTemplate>
<Listpicker.FullModeItemTemplate>
            <DataTemplate x:Name="PickerFullModeItemTemplate"> 
                <StackPanel tap="stk_Tap"> 
                    <TextBlock/> 
                </StackPanel> 
            </DataTemplate>
<Listpicker.FullModeItemTemplate>

现在使用此点击stk_Tap来执行您的操作,此事件也会在每次调用选择被调用时调用,但是,它不会像选择更改事件那样展示错误行为。

希望这会有所帮助。

答案 1 :(得分:0)

在加载ListPicker后附加SelectionChanged事件。

        ...
        InitializeComponent();
        YourListPicker.Loaded += YourListPicker_Loaded;
        ...

    private void YourListPicker_Loaded(object sender, RoutedEventArgs e)
    {
        YourListPicker.SelectionChanged += YourListPicker_SelectionChanged;
    }