3

の index プロパティListViewにバインドせずに行番号を持つを作成することが WPF で可能かどうか、私はいつも疑問に思っていましたか? IEnumerable<>行番号を自動インクリメントするテンプレートを作成することはありますか? それをどうやって悟る?

場合によっては便利です (たとえば、辞書やカスタム クラスのように、大量のデータを不適切な形式で返す外部クラスを使用する場合など)。

4

1 に答える 1

10

ここに画像の説明を入力

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" />
于 2013-04-17T13:37:48.473 に答える