7

将某些内容绑定到 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);

建议?

4

1 回答 1

5

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

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

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

于 2008-11-03T16:17:02.810 回答