GridView中的数字项

时间:2013-01-22 14:45:38

标签: c# xaml windows-store-apps

我想自动为添加到GridView的项目编号,最好是不需要将任何属性添加到ItemsSource中的对象。

我的尝试一直在使用ItemContainerStyle Template(为了您的享受而简化),但我没有找到任何我能绑定的内容,它会给我当前的索引项:

<Style x:Key="fooStyle"
       TargetType="GridViewItem">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="GridViewItem">
        <StackPanel Orientation="Horizontal">
          <TextBlock x:Name="numbering"
                     Text="{Binding to what exactly}" />
          <ContentPresenter x:Name="contentPresenter" />
        </StackPanel>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

您如何确保numbering TextBlock收到列表中的项目编号?

注意,这适用于Windows运行时。

2 个答案:

答案 0 :(得分:0)

我有一个临时修复。它不是最优的,因为它需要我添加到GridView的项目来实现特殊的接口。

public interface INumberedItem : INotifyPropertyChanged
{
    int NumberInList { get; set; }
}

public class NumberedGridView : GridView
{
    protected override void OnItemsChanged(object e)
    {
        base.OnItemsChanged(e);
        var i = 1;
        foreach (var item in Items.OfType<INumberedItem>())
        {
            item.NumberInList = i++;
        }
    }
}

现在我可以在我的XAML代码中绑定到NumberInlist

答案 1 :(得分:-1)

确保ItemsControl上的“AlternationCount”属性(在您的情况下为GridView)设置为某个(不是NaN)并使用以下绑定:

<Binding Path="(ItemsControl.AlternationIndex)" RelativeSource="{RelativeSource Mode=TemplatedParent}" Mode="OneWay"/>