在WPF GridView中查找单击元素的索引

时间:2014-11-02 02:01:08

标签: c# wpf gridview

我有一个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);
}

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

1 个答案:

答案 0 :(得分:3)

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

根据我的经验,如果您有IsItemClickEnabled="True" ItemClick事件将会触发,以下SelectionChanged 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 } 将不会触发,而且选定的指数为-1。

要获取索引,您可以通过从IndexOf

转换它来获取它
{{1}}

如果你愿意,你也可以从GridView.ItemsSource集合中获取它.IndexOf