Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ListView中获取单击的项目_C#_Xaml_Windows 8 - Fatal编程技术网

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

C# 如何在ListView中获取单击的项目,c#,xaml,windows-8,C#,Xaml,Windows 8,这应该是一项琐碎的任务,但我找不到怎么做。我想听听在listview中单击一个项目,获取相应的模型对象,然后启动一个新屏幕 这是ListView的XAML: <ListView x:Name="ItemListView" ItemTemplate="{StaticResource StoreFrontTileTemplate}" ItemContainerStyle="{StaticResource StoreFrontLVTileStyle}" Margin="

这应该是一项琐碎的任务,但我找不到怎么做。我想听听在listview中单击一个项目,获取相应的模型对象,然后启动一个新屏幕

这是ListView的XAML:

<ListView x:Name="ItemListView" 
    ItemTemplate="{StaticResource StoreFrontTileTemplate}"
    ItemContainerStyle="{StaticResource StoreFrontLVTileStyle}"
    Margin="0" VerticalAlignment="Top" ItemClick="MyClick" Tapped="MyTap"/>
导航到新屏幕的方法:

this.Frame.Navigate(typeof(SecondScreen));
它可以工作,但我需要单击项目的模型对象,并将其作为参数传递到第二个屏幕

但是MyClick从来没有被调用过,MyTap也没有给我任何关于点击项目的信息。“发件人”是列表视图

我下载了以下示例:

但它不包含我需要的内容,有一个主/详细视图,但它与绑定一起工作,我想做的是启动一个全新的屏幕


注意:我是Windows开发中的noob,我倾向于在Android或IOS中实现回调的常用方法,在这种方法中,您可以使用单击元素的位置实现回调。不知道在Windows 8中执行此操作的正确方法。

您可以使用
SelectionChanged
事件:

<ListView x:Name="ItemListView" SelectionChanged="MySelectionChanged" />
或者,如果您不需要选择功能以及如何使用
ItemClick=“MyClick”
您需要设置为
true

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



请注意,在这种情况下,您还需要将
SelectionMode
设置为
None
,您可以在XAML代码上使用listview的双击事件。 然后,在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");
        }
    }
//在ControllerLibrary命名空间中有一个类名“Message”
命名空间控制器库
{
公共类消息
{
公共字符串MessageID{get;set;}
公共字符串MessageName{get;set;}
}
}
//在页面标题处添加名称空间
xmlns:local1=“使用:ControllerLibrary”
//在Gridview
//在代码背后
私有无效btnAddPage_单击(对象发送者,路由目标e)
{
//获取选择消息
var selectedMessage=(发送者作为按钮),DataContext作为消息;
}

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

示例(对于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;

            // ... 

        }

如何获取已单击项目的索引?@amoghtalPalikar ItemClickEventArgs具有对已单击项目的引用。是否有任何建议说明此操作不起作用?如何从在中单击的项目的分组listview中的标题中获取密钥?
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 

        <GridView IsItemClickEnabled="True" Name="UserMessageList">
         <GridView.ItemTemplate>
           <DataTemplate x:DataType="local1:Message">                                          <StackPanel Orientation="Horizontal">
         <Button Content="{x:Bind MessageName}" HorizontalAlignment="Left" Margin="2 0 10 0" Click="btnUserMessage_Click">
        </Button>
        </StackPanel>
        </DataTemplate>
         </GridView.ItemTemplate>
        </GridView>

  //At code Behind
    private void btnAddPage_Click(object sender, RoutedEventArgs e)
      {
          //Get selecte message
          var selectedMessage = (sender as Button).DataContext as Message;
      }
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;

            // ... 

        }