2013-12-15 76 views
0

我的一個ListPicker中有一個SelectionChanged事件在我的一個應用程序頁面中,在加載頁面之前觸發多次。這對我來說真的很不方便,因爲當選擇某個項目時,會顯示一個MessageBox(並執行其他操作)。每當頁面導航到時,MessageBox顯示兩次。我怎樣才能解決這個問題?ListPicker SelectionChanged在導航過程中被稱爲多次的事件

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"); 
     } 
    }        
} 

回答

0

好,這是一個listpicker的行爲,有什麼最好的,你可以做的是,而不是使ThemeListPicker_SelectionChanged做出的DataTemplate內父StackPanel的有點像這

<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做你的動作,每次選擇變化被調用時,事件也會被調用,但是,它不會像選擇變化的事件那樣顯示錯誤的行爲。

希望這有助於。

+0

如何從stk_Tap事件中獲取在ListPicker中選擇的項目? – Matthew

0

在ListPicker加載後附加SelectionChanged事件。

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

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

我將不得不嘗試一下,根據我選擇的答案,這將是我目前正在做的更加可取的解決方案。 – Matthew

相關問題