2008-11-03 7 views
7

ListBox의 SelectedIndex에 바인딩하는 것이 쉽지만 이지만 ListBox의 모든 항목을 목록의 인덱스에 바인딩 할 수 있습니다. WPF ListBox 항목의 인덱스에 바인딩

그래서 여기에 내가 할 노력하고있어 무슨 이상한 소리를 할 수 있음 :

<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 속성을 사용하여 이벤트를 일으킨 항목을 확인할 수 있습니다.

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을 가져온 다음 ListBox에서 ListBoxItem의 위치를 ​​찾으십시오. 그러나 아직 갖고 있지 않은 것은 실제로 얻지 못합니다.

+0

글쎄, 실제로는 아이템을 가지고있는 것만으로도 이 될 수도 있습니다. 삭제하고 싶기 때문입니다. Thnx! – TimothyP