【问题标题】:WPF ListBox bind to index of the itemWPF ListBox 绑定到项目的索引
【发布时间】:2010-09-20 12:29:37
【问题描述】:

很容易将一些东西绑定到 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);

建议?

【问题讨论】:

    标签: wpf data-binding datatemplate


    【解决方案1】:

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

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

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

    【讨论】:

    • 好吧,实际上只有 item 就足够了,因为我想做的就是删除它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-03-27
    • 2016-10-11
    • 2011-01-02
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多