【发布时间】: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);
}
但是上面的每个解决方案都会抛出ArgumentOutOfRangeException 和index = -1。我在另一个页面上有完全相同的解决方案,我在 GridView 中有按钮并实现了Click,它在那里工作。任何建议都会受到赞赏。
【问题讨论】:
-
不确定你是什么绑定的,但是你可以看看我的文章here关于选择的索引/值等。这个和你的有什么区别?只有元素的类型?
-
我不确定 Windows Phone 中的 GridView,但我猜
e.ClickedItem as FrameworkElement将评估为null。尝试像这样直接传递ClickedItemitemGridView.Items.IndexOf(e.ClickedItem) -
第一个sn-p不起作用可能是因为
SelectedIndex在点击的时候还没有确定。对于第三个 sn-p,我认为这里有一些 Binding 相关的问题。只需按照我上面的建议尝试第二个 sn-p。 -
应该把它标记为 WP8.1。 WP8 上没有 GridView 之类的东西。
-
@ChubosaurusSoftware 不了解Windows Phone,下次你可以自己编辑Tag。