【问题标题】:Finding index of clicked element in WPF GridView在 WPF GridView 中查找单击元素的索引
【发布时间】:2014-11-02 02:01:08
【问题描述】:

我有一个元素的 GridView,我想在单击其中一个元素时执行一些操作。所以我将 GridView 的ItemClick 属性设置为TopicsPage_ItemClick 并实现该方法。我试图做出这样的反应(几次尝试):

private void TopicsPage_ItemClick(object sender, ItemClickEventArgs e)
{
    int index = itemGridView.SelectedIndex;
    string topicName = this.topicList[index].Name;
    this.Frame.Navigate(typeof(CardsPage), topicName);
}

private void TopicsPage_ItemClick(object sender, ItemClickEventArgs e)
{
    int index = itemGridView.Items.IndexOf((e.ClickedItem as FrameworkElement));
    string topicName = this.topicList[index].Name;
    this.Frame.Navigate(typeof(CardsPage), topicName);
}

private void TopicsPage_ItemClick(object sender, ItemClickEventArgs e)
{
    var item = (sender as FrameworkElement).DataContext;
    int index = itemGridView.Items.IndexOf(item);
    string topicName = this.topicList[index].Name;
    this.Frame.Navigate(typeof(CardsPage), topicName);
}

但是上面的每个解决方案都会抛出ArgumentOutOfRangeExceptionindex = -1。我在另一个页面上有完全相同的解决方案,我在 GridView 中有按钮并实现了Click,它在那里工作。任何建议都会受到赞赏。

【问题讨论】:

  • 不确定你是什么绑定的,但是你可以看看我的文章here关于选择的索引/值等。这个和你的有什么区别?只有元素的类型?
  • 我不确定 Windows Phone 中的 GridView,但我猜 e.ClickedItem as FrameworkElement 将评估为 null。尝试像这样直接传递ClickedItem itemGridView.Items.IndexOf(e.ClickedItem)
  • 第一个sn-p不起作用可能是因为SelectedIndex在点击的时候还没有确定。对于第三个 sn-p,我认为这里有一些 Binding 相关的问题。只需按照我上面的建议尝试第二个 sn-p。
  • 应该把它标记为 WP8.1。 WP8 上没有 GridView 之类的东西。
  • @ChubosaurusSoftware 不了解Windows Phone,下次你可以自己编辑Tag。

标签: c# wpf gridview


【解决方案1】:

假设您的 GridView ItemsSource 已绑定到集合。

根据我的经验,如果您有 IsItemClickEnabled="True",以下是我的行为,ItemClick 事件将触发但SelectionChanged 不会触发,使您的 SelectedIndex 为 -1。

要获取索引,您可以通过从 IndexOf 投射它来获取它

private void TopicsPage_ItemClick(object sender, ItemClickEventArgs e)
{
    GridView gv = sender as GridView;
    index = gv.Items.IndexOf(e.ClickedItem);   // don't re cast it as anything; just past it
}

如果你喜欢,你也可以从 GridView.ItemsSource collection.IndexOf 中获取它

【讨论】:

    猜你喜欢
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2013-01-03
    • 2011-12-16
    相关资源
    最近更新 更多