2015-03-04 3 views
0

Я разрабатываю приложение Windows Phone 8.1 в XAML и C#. У меня есть ListView, получающий его элементы из связанного списка и отображающий их через DataTemplate. Теперь в этом DataTemplate есть несколько дочерних элементов, и когда пользователь набирает элемент в списке, я хочу иметь возможность определить, какой дочерний элемент он фактически коснулся. В зависимости от этого приложение должно либо расширить представление с более подробной информацией внутри элемента, либо перейти на другую страницу.Как определить, какой дочерний элемент элемента ListView был нажат?

Обработчик событий ItemClick в ListView - ListView_ItemClick (отправитель объекта, ItemClickEventArgs e), и я думал, что e.OriginalSource может дать мне ответ, но это просто дало мне щелчок ListItem.

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

+0

Лучший способ осуществить это MVVM свойство и командное связывание. какой Windows Phone 8.1 вы используете для разработки WinRT или Silverlight? –

+0

@MuhammadSaifullah Я использую WinRT. Как я могу использовать привязку команды? – Robin

+0

Я использую MVVM Light для моего телефона Windows 8.1. Приложение WinRT. http://blog.galasoft.ch/posts/2014/04/building-a-universal-application-for-windows-phone-8-1-and-windows-8-1-with-mvvm-light/ –

ответ

2

Я просто нашел решение сам. Я установил ListView в SelectionMode = «None» и IsItemClickEnabled = «False», а затем добавил обработчики Tapped для отдельных дочерних элементов. Работает так, как я хотел.

0

Используйте событие SelectionChanged.

Сдайте объект sender на номер ListView, а затем заберите изделие с SelectedItem.

Похожий вопрос здесь, но для другого контроля:

Get the index of the selected item in longlistselector

+1

Таким образом, я получаю только элемент элемента списка ListView (если я правильно вас понимаю, или я что-то упускаю?), Который у меня уже работает. Я хочу определить, в каком дочернем элементе INSIDE был нажат элемент. – Robin

1

У меня есть TextBlock и изображение в одном элементе ListViewItem и только что использовалось событие Image_PointerPressed. Выполнение этого также вызывает событие ItemClick для ListView, поэтому сначала отключите его, сделайте нужный материал, а затем снова включите событие ItemClick, чтобы он все еще срабатывал при нажатии TextBlock.

код позади:

private async void imgDone_PointerPressed(object sender, PointerRoutedEventArgs e) 
    { 

     // disable click event so it won't fire as well 
     lvwCouncils.IsItemClickEnabled = false; 

     // do stuff 
     MessageDialog m = new MessageDialog("User Details"); 
     await m.ShowAsync(); 

     // Re-enable the click event 
     lvwCouncils.IsItemClickEnabled = true; 
    } 

Xaml:

<ListView x:Name="lvwCouncils" ItemClick="lvwCouncils_ItemClicked" IsItemClickEnabled="true" > 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock 
        Grid.Column="1" 
        Text="{Binding council_name}" 
        FontSize="24" 
        Margin="10,10,30,10" 
            /> 
         <Border Height="20" Width="20" Margin="10,10,0,10" > 
          <Image x:Name="imgDone" 
            Source="Assets/user_earth.png" Stretch="UniformToFill" PointerPressed="imgDone_PointerPressed"/> 
         </Border> 
        </StackPanel> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView>