1

に追加されたアイテムに自動的に番号を付けたいと思い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 に答える