将一些东西绑定到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);
建议?
答案 0 :(得分:5)
据我所知,实际上没有一个属性可以指示您项目的索引。如果您可以访问ListBox绑定到的项目的原始列表,则可以访问超链接的DataContext以确定项目的索引,如下所示:
var hyperlink = (Hyperlink)sender;
var item = (SourceType)hyperlink.DataContext;
int index = sourceList.IndexOf(item);
或者,您可以在超链接上调用ItemsControl.ContainerFromElement以获取与超链接关联的ListBoxItem,然后在ListBox中找到ListBoxItem的位置,但它并不能真正获得您尚未拥有的任何内容。 / p>