2008-11-03 5 views
7

Es ist einfach, etwas an den SelectedIndex der ListBox, zu binden, aber ich möchte, dass jedes Element in der ListBox in der Lage ist, an seinen Index in der Liste zu binden.WPF ListBox Bindung an Index des Elements

könnte seltsam klingen, so ist hier, was ich versuche zu tun: die TAG Eigenschaft des Hyperlinks zu dem Index des Elements in Frage

<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> 

I binden möchten. So, wenn der Benutzer auf den Hyperlink klickt, kann ich bestimmen, welches Element das Ereignis verursachte, das die TAG-Eigenschaft des Hyper-links verwendet.

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

Vorschläge?

Antwort

5

Soweit ich weiß, gibt es nicht wirklich eine Eigenschaft, die den Index Ihres Artikels angibt. Wenn Sie den Zugriff auf die ursprüngliche Liste von Elementen haben, mit dem Ihr ListBox gebunden ist, können Sie den Datacontext Ihrer Hyperlink Zugriff auf den Index Ihres Artikels zu bestimmen, wie folgt aus:

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

Alternativ könnten Sie Items nennen. ContainerFromElement auf dem Hyperlink, um das mit dem Hyperlink verknüpfte ListBoxItem abzurufen und dann die ListBoxItem-Position in der ListBox zu finden, aber es erhält nichts wirklich, was Sie nicht bereits hatten.

+0

Nun, eigentlich nur Artikel haben könnte mehr als genug, weil ich tun möchte, ist es zu löschen. Thnx! – TimothyP