1

我想自动对添加到 a 的项目进行编号GridView,最好以不需要将任何属性添加到ItemsSource.

我的尝试一直在使用ItemContainerStyle's 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 运行时的。

4

2 回答 2

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++;
        }
    }
}

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

于 2013-01-23T07:47:52.373 回答
-1

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

<Binding Path="(ItemsControl.AlternationIndex)" RelativeSource="{RelativeSource Mode=TemplatedParent}" Mode="OneWay"/>
于 2013-01-22T14:49:12.017 回答