Я хотел бы получить текущий индекс элемента в списке, который был добавлен динамически. По сути, мой элемент — это HubTile, и hubtiles добавляются по событию клика по одному. Коллекция элементов hubtile хранится в ObservableCollection. Эта наблюдаемая коллекция привязана к списку, в котором отображаются элементы. Чтобы проиллюстрировать, то, что у меня есть, выглядит следующим образом:
TabsPage.xaml
<ListBox x:Name="tileList" Grid.Row="0" Margin="12,0,12,0" toolkit:TiltEffect.IsTiltEnabled="True">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<toolkit:HubTile Title="{Binding TileName}" Margin="6"
Notification="{Binding Notification}"
DisplayNotification="{Binding DisplayNotification}"
Message="{Binding Message}"
GroupTag="{Binding GroupTag}"
Source="{Binding ImageUri}"
Tap="hubTile_Tap">
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu x:Name="menu">
<toolkit:MenuItem Header="pin to start" Tap="MenuItem_Tap"/>
<toolkit:MenuItem Header="delete" Tap="deleteMenuItem_Tap"/>
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
</toolkit:HubTile>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
TabsPage.xaml.cs
ObservableCollection<TileItem> tileItems;
public TabsPage()
{
InitializeComponent();
CreateTileList(); //starts the list of HubTiles with a single main tile
}
private void CreateTileList()
{
tileItems = new ObservableCollection<TileItem>()
{
//TileItem is
new TileItem() { ImageUri = mainImage, Title = "main", /*Notification = "",*/ Message = "main", GroupTag = "MainGroup", TileName = "main" },
};
//Set the first tile item
this.tileList.ItemsSource = tileItems; //sets the tileList Listbox ItemsSource to the tileItems ObservableCollection
}
void addNew_Click(object sender, EventArgs e)
{
BitmapImage newTileImage = new BitmapImage();
var newItem = new TileItem() { ImageUri = newTileImage, Title = "new", /*Notification = "",*/ Message = "new HubTile", GroupTag = "TileGroup", TileName = "new" };
tileItems.Add(newItem); //update UI immediately and add to collection
}
private void hubTile_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
//how to get the current index of the tapped HubTile//
//var tap = (((sender as HubTile).Parent as ListBox).SelectedIndex); //NullReferenceException thrown
}
Итак, элементы HubTile правильно добавляются в пользовательский интерфейс, но при касании события я не знаю, как получить выбранный индекс текущего касаемого элемента HubTile?