我想自动为添加到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运行时。
答案 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"/>