获取当前绑定索引

时间:2014-01-15 17:54:28

标签: wpf xaml

我的XAML代码会在WPF window中创建标签。如何让每个Label的内容包含从ItemSource呈现的位置?

目前,结果是:AAA BBB CC(它们是3个标签)

我想要的是:1 2 3(他们是3 label0 1 2,因为索引基于0

<ItemsControl Name="m_Header">
    <ItemsControl.ItemsPanel>
       <ItemsPanelTemplate>
         <StackPanel Orientation="Horizontal"/>
       </ItemsPanelTemplate>
     </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
      <DataTemplate>
        <Label Margin="-2,0,0,0" 
               Width="{Binding Path=Columns[0].ActualWidth, ElementName=m_DataGrid}"
               Content="{Binding}" FontSize="15" Foreground="#777" />
       </DataTemplate>
   </ItemsControl.ItemTemplate>
</ItemsControl>

3 个答案:

答案 0 :(得分:1)

Index类中没有定义ItemsControl属性,因此无法显示该值。但是,有一个技巧可以用来获得你想要的东西。如果您的ItemsControl.AlternationCount属性设置为适当高的数字,那么您可以使用ItemsControl.AlternationIndex属性为您执行相同的操作:

<ItemsControl AlternationCount="999"><!--Set this as high as you need-->
    <ItemsControl.ItemsPanel>
       <ItemsPanelTemplate>
         <StackPanel Orientation="Horizontal"/>
       </ItemsPanelTemplate>
     </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
      <DataTemplate>
        <Label Margin="-2,0,0,0" Width="{Binding Path=Columns[0].ActualWidth, 
ElementName=m_DataGrid}" Content="{(ItemsControl.AlternationIndex), RelativeSource={
RelativeSource TemplatedParent}}" FontSize="15" Foreground="#777" />
       </DataTemplate>
   </ItemsControl.ItemTemplate>
</ItemsControl>

如果您希望数字以不同的数字开头,则可以添加Converter,只需在每个数字中添加或减去相关值。

答案 1 :(得分:0)

添加@sheridan答案。

根据您的基础数据源,您可以使用source count属性来设置AlternationCount

<强>模型

  public class DemoViewModel {
    public ObservableCollection<string> Products { get; set; }
  }

设置DataContext

public MainWindow() {
      InitializeComponent();

      var vm = new DemoViewModel();
      vm.Products = new ObservableCollection<string> { "elm", "oak", "pine" };
      this.DataContext = vm;
    }

<强> XAML

  <ItemsControl AlternationCount="{Binding Products.Count}"
                ItemsSource='{Binding Products}'>
    <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
        <StackPanel Orientation="Horizontal" />
      </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
      <DataTemplate>
        <StackPanel Orientation='Vertical'>
          <Label Margin="2" Width='200'
                 Content="{Binding (ItemsControl.AlternationIndex), RelativeSource={
RelativeSource TemplatedParent}}"
                 Foreground="#777" />
          <TextBlock Text='{Binding}' />
        </StackPanel>
      </DataTemplate>
    </ItemsControl.ItemTemplate>
  </ItemsControl>

<强>结果

enter image description here

答案 2 :(得分:0)

以上所有代码都很有效:)。

如何将Binding Path=Columns[0]更改为Binding Path=Columns[index_here]

它位于Width="{Binding Path=Columns[0].ActualWidth, ElementName=m_DataGrid}"