簡體   English   中英

在WPF GridView中查找單擊元素的索引

[英]Finding index of clicked element in 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);
}

但是上面的每個解決方案都會拋出帶有index = -1 ArgumentOutOfRangeException 我在另一頁上有完全相同的解決方案,在GridView中有按鈕,並實現了Click ,並且在那里可以正常工作。 任何建議將不勝感激。

假設您的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中獲取它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM