如何在ListView中获取单击的项目

这应该是一个微不足道的任务,但我找不到如何做到这一点。 我想听一下listview中的项目,获取相应的模型对象,然后启动一个新屏幕。

这是ListView的XAML:

 

而MyClick,MyTap:

 private void MyClick(object sender, ItemClickEventArgs e) { Debug.WriteLine("Click!"); } private void MyTap(object sender, TappedRoutedEventArgs e) { Debug.WriteLine("TAp!!" + sender.ToString() + "--" + e.ToString()); } 

导航到新屏幕的方法:

 this.Frame.Navigate(typeof(SecondScreen)); 

它工作,但我需要点击项目的模型对象,并将其作为参数传递给第二个屏幕。

但MyClick永远不会被调用,MyTap也不会向我提供有关所点击项目的任何信息。 “sender”是ListView。

我下载了这些exaples:

http://code.msdn.microsoft.com/windowsapps/XAML-ListView-sample-pack-0ec6b60f

但它不包含我需要的东西,有一个主/细节视图,但它适用于绑定,我想要做的是启动一个完整的新屏幕。

注意:我是Windows开发中的菜鸟,并且采用通常的方式在Android或IOS中执行此操作,您可以使用单击元素的位置实现回调。 不知道在Windows 8中正确的方法。

您可以使用SelectionChanged事件:

  

您可以从SelectionChangedEventArgs获取所选/已取消的项目,例如:

 private void MySelectionChanged(object sender, SelectionChangedEventArgs e) { Debug.WriteLine("Selected: {0}", e.AddedItems[0]); } 

或者,如果您不需要选择function以及使用ItemClick="MyClick" ,则需要将IsItemClickEnabled设置为true

获取或设置一个值,该值指示视图中的项是否引发ItemClick事件以响应交互。

  

请注意,在这种情况下,您还需要将SelectionMode设置为None

您可以在XAML代码上使用listview的DoubleTapped事件。 然后,在C#代码中,您可以获得以下位置:

 private void display_DoubleTapped_1(object sender, Windows.UI.Xaml.Input.DoubleTappedRoutedEventArgs e) { int items = display.SelectedIndex; // use this index to do something } 

我用这个:

 private void ListUI_Tapped(object sender, TappedRoutedEventArgs e) { if(ListUI.SelectedItems.Count != 0) { Debug.WriteLine("It's not a trap at all my friend"); } else { Debug.WriteLine("Its a trap"); } } 
  // We have a class name 'Message' in ControllerLibrary Namespace namespace ControllerLibrary { public class Message { public string MessageID { get; set; } public string MessageName { get; set; } } } // Add name space at page heading xmlns:local1="using:ControllerLibrary" //At Gridview          //At code Behind private void btnAddPage_Click(object sender, RoutedEventArgs e) { //Get selecte message var selectedMessage = (sender as Button).DataContext as Message; } 

我建议,在与XAML关联的代码隐藏C#文件中,使用ItemClickEventArgs对象的ClickedItem属性作为ItemClick事件处理程序的参数传递。

示例(对于GridView,但它与ListView的想法相同)

 private void GridView_ItemClick(object sender, ItemClickEventArgs e) { // This is how you determine the clicked item in a GridView, // and obtain the relevant element of the underlying collection // (to which the GridView is bound). // 'Tile' is here the 'type' used in the said collection. Tile output = e.ClickedItem as Tile; // ... }