代码之家  ›  专栏  ›  技术社区  ›  TimothyP

WPF列表框绑定到项目的索引

  •  7
  • TimothyP  · 技术社区  · 16 年前

    将某些内容绑定到列表框的SelectedIndex很容易, 但我希望列表框中的每个项目都能绑定到列表中的索引。

    听起来可能很奇怪,所以我想做的是:

    <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 回复  |  直到 13 年前
        1
  •  5
  •   Amanda Mitchell    16 年前

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

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

    或者,您可以调用Items Control。在超链接上的ContainerFromElement上获取与超链接关联的ListBoxItem,然后找到ListBoxItem在列表框中的位置,但它并不能真正为您提供任何您还没有的东西。

    推荐文章