2015-12-10 76 views
0

獲取選定的項目我有一個GridView這樣的:從一個GridView

<GridView x:Name="MyGrid" ItemsSource="{x:Bind Wallpapers}" SelectionMode="Multiple"> 
    <GridView.ItemTemplate> 
     <DataTemplate x:DataType="data:ImageItem"> 
      <Image Width="150" Height="150" Source="{x:Bind img}" Tag="{x:Bind TagIndex}"/> 
     </DataTemplate> 
    </GridView.ItemTemplate> 
</GridView> 

我需要選擇圖像控制,以獲得他們的Tag屬性。 我試過這樣的:

foreach (Image img in MyGrid.SelectedItems) 
{ 
    int index = img.Tag as int; 
} 

但是我得到System.InvalidCastException。我怎樣才能做到這一點?

+0

什麼是您的調試器告訴你的類型'在運行時標籤屬性? –

+0

它給我在每行上的System.InvalidCastException。標籤屬性設置正確int –

+0

執行代碼可能會給你,但使用調試器應該告訴你爲什麼*。我總是建議在拋出時拋棄所有CLR異常 –

回答

0

您會收到一個InvalidCast異常,因爲gridview SelectedItems集合的成員與gridview ItemsSource屬性綁定到的集合中的項目(給定示例中的ImageItem)具有相同的類型。

因此,下面的代碼可以用來直接獲取標籤指數:

foreach (ImageItem imgItem in MyGrid.SelectedItems) 
{ 
    int index = imgItem.TagIndex; 
} 

或者使用var關鍵字:

foreach (var imgItem in MyGrid.SelectedItems) 
{ 
    var index = imgItem.TagIndex; 
} 
+0

非常感謝,它的工作原理! –

1

編輯:刪除舊的答案。

嘗試這樣的事情

foreach(var item in MyGrid.SelectedItems) 
{ 
    var image = item as TheTypeInItemsSource;//This is the type you have used in ItemsSource 
    int index = image.TagIndex; 
} 

我沒有Win10上這臺電腦,現在來測試它,所以我不知道它的工作原理。

GridView的SelectedItems與ItemsSource中的SelectedItems類型相同。根據我的理解,作爲源提供給GridView的項目類型包含一個圖像和一個TagIndex整數。只需獲取該項目的TagIndex而不是來自Image控件的Tag。