2014-11-02 58 views
2

我有一个GridView的元素,我想在单击其中一个元素时执行一些操作。所以我将GridView的ItemClick属性设置为TopicsPage_ItemClick并实现该方法。我想这样的反应(少数尝试):在WPF GridView中查找单击元素的索引

​​

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

+0

不知道是什么你是绑定,但你可以看看我的文章[这里](http://www.codeproject.com/Articles/671544/Understanding-SelectedValue-SelectedValuePath-Sele)关于选定的索引/值等有什么区别在这和你的其他之间?只有元素的类型? – Noctis 2014-11-02 02:15:23

+1

我不确定在Windows Phone中的GridView,但我猜'e.ClickedItem作为FrameworkElement'会评估为null。尝试像这样'itemGridView.Items.IndexOf(e.ClickedItem)'直接传递'ClickedItem'' – 2014-11-02 02:18:06

+0

第一个代码段不起作用可能是因为'SelectedIndex'在点击时没有被确定。对于第三个片段,我认为这里有一些绑定相关的问题。只需按照上面的建议尝试第二个片段即可。 – 2014-11-02 02:20:48

回答

3

会假设你的GridView ItemsSource绑定到一个集合。

这里是我的经验,如果你有IsItemClickEnabled="True"ItemClick事件会触发但是SelectionChanged不会触发离开你与-1的SelectedIndex。

要获得索引,你可以通过你从铸造的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得到它,以及如果你喜欢