WPF ListBox绑定到项目的索引

时间:2008-11-03 16:01:25

标签: wpf data-binding datatemplate

将一些东西绑定到ListBox的SelectedIndex很容易, 但我希望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属性绑定到相关项的索引。 因此,当用户单击超链接时,我可以使用该超链接的TAG属性确定导致事件的项目。

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

建议?

1 个答案:

答案 0 :(得分:5)

据我所知,实际上没有一个属性可以指示您项目的索引。如果您可以访问ListBox绑定到的项目的原始列表,则可以访问超链接的DataContext以确定项目的索引,如下所示:

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

或者,您可以在超链接上调用ItemsControl.ContainerFromElement以获取与超链接关联的ListBoxItem,然后在ListBox中找到ListBoxItem的位置,但它并不能真正获得您尚未拥有的任何内容。 / p>