の index プロパティListView
にバインドせずに行番号を持つを作成することが WPF で可能かどうか、私はいつも疑問に思っていましたか? IEnumerable<>
行番号を自動インクリメントするテンプレートを作成することはありますか? それをどうやって悟る?
場合によっては便利です (たとえば、辞書やカスタム クラスのように、大量のデータを不適切な形式で返す外部クラスを使用する場合など)。
XAML:
<ListView.View>
<GridView>
<!-- This is the column where the row index is to be shown -->
<GridViewColumn Width="100" Header="No."
DisplayMemberBinding="{Binding RelativeSource=
{RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}},
Converter={StaticResource IndexConverter}}" />
<!-- other columns, may be bound to your viewmodel instance -->
<GridViewColumn Width="100"
...
</GridViewColumn>
</GridView>
</ListView.View>
コンバーター クラスを作成します。
public class IndexConverter : IValueConverter
{
public object Convert(object value, Type TargetType, object parameter, CultureInfo culture)
{
var item = (ListViewItem) value;
var listView = ItemsControl.ItemsControlFromItemContainer(item) as ListView;
int index = listView.ItemContainerGenerator.IndexFromContainer(item) + 1;
return index.ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
ウィンドウまたはコントロールのリソース セクション:
<Converter:IndexConverter x:Key="IndexConverter" />