응용 프로그램 페이지에 ListPicker가 있지만 페이지가로드 될 때 SelectionChanged 이벤트가 여러 번 호출됩니다. 이 문제를 피하기 위해 이전 질문에서 나는 여기 ListPicker SelectionChanged Event Called Multiple Times During Navigation을 물어 봤는데 ThemeListPicker_SelectionChanged를 Datatemplate .. 내에서 부모 Stackpanel로 만드는 대신 제안이 StackPanel에서 stk_Tap
이라는 탭 이벤트를 만들고 ' 이 이벤트는 변경된 선택 사항이 호출 될 때마다 호출되지만 선택 이벤트가 변경된 것과 같은 버그가있는 동작을 나타내지 않습니다. 'StackPanel의 탭된 이벤트에서 탭된 항목을 얻는 방법
이제 그에 따라 해결책을 조정했지만 ListPicker의 어느 아이템이 선택되고 있는지, 현재 선택되어 있는지를 판별하는 방법을 모른다. 또한 StackPanel이 항목을 가져올 수 있다고 생각했기 때문에 ListPicker에서 ListPicker SelectionChanged 이벤트를 제거했습니다. 그러나 이것이 올바른지 또는 어떻게 수행 할 것인지 확실하지 않습니다.
XAML
<phone:PhoneApplicationPage.Resources>
<DataTemplate x:Name="PickerItemTemplate">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</phone:PhoneApplicationPage.Resources>
<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");
}
}
}
* 편집 : 나는 코드에서 ListPicker 인 selectionchanged 이벤트를 왼쪽 경우에도,
<phone:PhoneApplicationPage.Resources>
<DataTemplate x:Name="PickerItemTemplate">
<StackPanel tap="stk_Tap">
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</phone:PhoneApplicationPage.Resources>
<toolkit:ListPicker x:Name="ThemeListPicker" Header="Theme"
ItemTemplate="{StaticResource PickerItemTemplate}"
/>
그래서 내 솔루션을 업데이트하는 방법 수정을 한 뒤에 페이지로드/탐색에 이벤트가 두 번 호출되는 것을 보지 못했습니다. ating to,하지만 현재 선택한 항목을 지금 가져 오는 방법을 모르겠습니까?
EDIT2 **
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
themeList = new List<TestApp.Common.Theme>();
themeList.Add(new TestApp.Common.Theme() { Name = "Darker", name = "dark" });
themeList.Add(new TestApp.Common.Theme() { Name = "Lighter", name = "light" });
ThemeListPicker.ItemsSource = themeList;
}
private void stk_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
if (ThemeListPicker.SelectedIndex != -1)
{
//Need to get the current ThemeListPicker's 'name'
var selectedItem1 = (sender as StackPanel).DataContext as ListPicker;
//use selectedItem1
}
}
잘
// 스택 패널 탭 이벤트와 방법을 onNavigatedTo r에 이렇게 수정, 당신은 또한 탭 이벤트와 값 selectedIndex의를 받고있을 수 있습니다. –