2008-11-03 90 views
7

很容易將某些東西綁定到列表框的SelectedIndex, 但我希望列表框中的每個項目都能夠綁定到它在列表中的索引。WPF列表框綁定到項目的索引

也許聽起來不可思議,所以這裏就是我想要做的事:

<DataTemplate x:Key="ScenarioItemTemplate"> 
<Border 
    Margin="8,2,8,2" 
    Background="#FF3C3B3B" 
    BorderBrush="#FF797878" 
    BorderThickness="2" 
    CornerRadius="5"> 
    <DockPanel> 
     <DockPanel DockPanel.Dock="Top" Margin="0,2,0,0"> 
      <Label HorizontalAlignment="Left" 
        DockPanel.Dock="Left" 
        FontWeight="Heavy" 
        Foreground="White" 
        Content="{Binding Path=Position}" 
        MinWidth="50"/> 

      <Label 
        Content="{Binding Path=Name}" 
        DockPanel.Dock="Left" 
        FontWeight="Heavy" 
        Foreground="white"/> 
      <Label 
        Content="{Binding Path=Header}" 
        Foreground="white" 
        DockPanel.Dock="Left"/> 

      <TextBlock HorizontalAlignment="Right" 
         Background="#FF3C3B3B" 
         DockPanel.Dock="Left" Foreground="White" FontWeight="Heavy"> 
       <Hyperlink Click="CloseHyperlink_Click" Tag="">X</Hyperlink> 
      </TextBlock> 

我想超鏈接的TAG屬性綁定到有問題的項目的索引。 因此,當用戶單擊超鏈接時,我可以使用該超鏈接的TAG屬性確定導致該事件的項目。

var hyperlink = (Hyperlink)sender; 
var index = Convert.ToInt32(hyperlink.Tag); 

建議?

回答

5

據我所知,沒有真正的財產,指示您的項目的索引。如果你有機會到項目的原始清單到你的列表框的束縛,你可以訪問DataContext的超鏈接,以確定您的項目的索引,就像這樣:

var hyperlink = (Hyperlink)sender; 
var item = (SourceType)hyperlink.DataContext; 
int index = sourceList.IndexOf(item); 

或者,你可以調用的ItemsControl。超鏈接上的ContainerFromElement獲取與超鏈接關聯的ListBoxItem,然後在列表框中找到ListBoxItem的位置,但它並沒有真正爲您帶來任何您還沒有的東西。

+0

嗯,其實只是有項目可能是綽綽有餘,因爲我想要做的就是刪除它。日Thnx! – TimothyP 2008-11-03 16:24:50