SelectionChanged Событие для ListBox в Panorama.ItemTemplate для Windows Phone? - PullRequest
1 голос
/ 29 февраля 2012

У меня есть шаблон элемента для управления панорамой.В этом шаблоне у меня есть список с шаблоном listItem.У меня проблема с выбором измененного события в списке.

<phone:PhoneApplicationPage.Resources>
    <CollectionViewSource x:Key="SlideItemList" Filter="collectionView_Filter"/>
</phone:PhoneApplicationPage.Resources>

<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">

    <!--Panorama control-->
    <controls:Panorama x:Name="AppPano" ItemsSource="{Binding SlidesCollections}" SelectionChanged="AppPano_SelectionChanged" >
        <controls:Panorama.Background>
            <ImageBrush ImageSource="PanoramaBackground.png"/>
        </controls:Panorama.Background>

        <controls:Panorama.ItemTemplate>
            <DataTemplate>
                <Grid VerticalAlignment="Top" HorizontalAlignment="Left" Margin="0,-100,0,0">
                    <StackPanel HorizontalAlignment="Center" Height="250" Width="200" VerticalAlignment="Top">
                        <TextBlock Text="{Binding Title}" HorizontalAlignment="Center" FontSize="200" Width="Auto"/>
                    </StackPanel>
                    <ListBox x:Name="ItemsList" ItemsSource="{Binding Source={StaticResource SlideItemList}}" Margin="0,250,0,0" VerticalAlignment="Top" SelectionChanged="ItemsList_SelectionChanged" Height="430">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel x:Name="ImgStack" HorizontalAlignment="Left" Height="430" VerticalAlignment="Top" Width="370" Margin="50,0,0,0">
                                    <Image Height="350" Width="360" Source="{Binding Image}"/>
                                    </StackPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                </Grid>
            </DataTemplate>
        </controls:Panorama.ItemTemplate>
    </controls:Panorama>
</Grid>

Xaml.cs

  private void keyItemsList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var listbox = (ListBox)sender;
        var conGen = listbox.ItemContainerGenerator;
        var item = (UIElement)conGen.ContainerFromIndex(listbox.SelectedIndex);

        if (item != null)
        {
            int selectedItemList = listbox.SelectedIndex;
            if (sLasListItem != selectedItemList)
            {
                 // navigate to another page
                 sLasListItem = selectedItemList;
            }
        }
    }

Связывание элементов интерфейса работает отлично.

Проблема: 1. Когдая выбираю новый элемент из списка на одной странице элемента панорамы, он будет активирован, событие одинакового выбора изменилось для всех элементов панорамы.

Пример: Давайте рассмотрим, у меня есть 4 элемента панорамы.Я выбрал 2-й элемент из списка элементов 1-й панорамы.этот выбор изменил событие, выполненное 4 раза.

Я ожидал, что когда я выберу новый элемент из списка, это событие должно сработать только один раз для соответствующего элемента панорамы.

Просьба подсказать, как это сделать ...

1 Ответ

1 голос
/ 01 марта 2012

Это потому, что вы связываете один и тот же список 4 раза. (Предполагая, что SlidesCollections содержит 4 элемента.)

Поскольку каждый список представляет собой одни и те же данные, при изменении выбранного элемента в одном представлении этих данных он фактически изменяется в базовом (хотя и отфильтрованном) списке.

Вместо этого вы должны создать отдельные списки в модели представления.

...