我想获取动态添加的列表框中项目的当前索引。基本上我的项目是HubTile,并且在一次点击事件中添加了hubtile。 hubtile项目的集合保存在ObservableCollection中。这个observablecolelction绑定到一个显示项目的列表框。为了说明,我所拥有的内容如下:
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项目已正确添加到UI中,但在点击事件中我不知道如何获取当前点击的HubTile项目的选定索引?
答案 0 :(得分:0)
使tileItems成为一个公共属性,并在XAML中将它作为源绑定到它。
添加一个public int并将其路径绑定为SelectedIndex
<ListBox ItemsSource="{Binding Path=Rules}" SelectedIndex="{Binding Path=SelectedIndex, Mode=TwoWay}">
答案 1 :(得分:0)
您可以使用单击的项目的DataContext,如
private void hubTile_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
FrameworkElement element = (FrameworkElement)sender;
TileItem item = (TileItem)element.DataContext;
int index = tileItems.IndexOf(item);
// Use the index
}
您还可以订阅ListBox的SelectionChanged事件,而不是Hubtile的Tap事件。然后在Selectionchanged事件中,您可以获得索引。
private void OnSelectionChanged(object sender, SelectionChangedEventArgs selectionChangedEventArgs)
{
int index = tileList.SelectedIndex;
}