2012-09-21 31 views
2

我想獲得動態添加的列表框中項目的當前索引。本質上,我的物品是一個HubTile,並且一次一個click事件添加焦點。這些具有爭議的項目集合被保存在一個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項目的選定索引?

回答

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 
} 

您也可以訂閱SelectionChanged事件而不是Hubtile的Tap事件。然後在Selectionchanged事件中,您可以獲取索引。

private void OnSelectionChanged(object sender, SelectionChangedEventArgs selectionChangedEventArgs) 
    { 
     int index = tileList.SelectedIndex; 
    } 
0

使tileItems成爲公共屬性並將其作爲源在XAML中綁定到它。

給它添加一個公衆詮釋和綁定路徑作爲SelectedIndex的

<ListBox ItemsSource="{Binding Path=Rules}" SelectedIndex="{Binding Path=SelectedIndex, Mode=TwoWay}">