我有一个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
,它在那里工作。任何建议都会受到赞赏。
答案 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