3

彼の列の1つがグリッド内の行のシリアル番号を取得すると思われるDataGridがあり、DataGridは次のリストにバインドされています。

public IList<xx> ListXX= new List<xx>();

xxクラスには、残りの列にバインドするいくつかの変数が含まれています。

リスト内の列の番号をDataGrid内の列にバインドするにはどうすればよいですか?

4

3 に答える 3

2

私はこの方法で問題を解決しました:

インデックスリストへのコンバーターを作成しました。

public class IndexConverter : IMultiValueConverter
{
    public object Convert(
        object[] values, Type targetType,
        object parameter, System.Globalization.CultureInfo culture)
    {
        var xx= values[0] as xx;
        var listxx= values[1] as List<xx>;
        if (xx== null)
            return null;
        return (listxx.FindIndex(x => x == xx) + 1).ToString();
    }

    public object[] ConvertBack(
        object value, Type[] targetTypes,
        object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

DataGridで、MultiBindingを使用して列をバインドします。

 <DataGridTextColumn Header="#" IsReadOnly="True">
     <DataGridTextColumn.Binding>
           <MultiBinding Converter="{StaticResource indexConverter}">
                <Binding />
                 <Binding RelativeSource=
                     "{RelativeSource AncestorType={x:Type DataGrid}}"
                     Path="ItemsSource"></Binding>
            </MultiBinding>
     </DataGridTextColumn.Binding>
  </DataGridTextColumn>
于 2013-02-10T07:07:02.587 に答える
1

あなたが提供した限られた情報で。リストをWPFグリッドにバインドしようとしていると想定しています。以下のように使用できます。

this.dataGrid1.ItemsSource = list;

もう1つは、XAMLでAutoGenerateColumnがtrueに設定されていることを確認することです。

これが機能しない場合。XMLがどのように見えるか、コードでXMLをバインドしようとしている方法などの詳細情報を投稿してください。

于 2013-02-10T07:00:13.640 に答える
1

あなたがあなたのListXXアイテムの注文を知っているなら、あなたは次のようなことをすることができます:

        <DataGrid>
            <DataGridTextColumn Header="#" IsReadOnly="True" Binding="{Binding LisXX[0]}"></DataGridTextColumn>
            <DataGridTextColumn Header="#" IsReadOnly="True" Binding="{Binding LisXX[5]}"></DataGridTextColumn>
            <DataGridTextColumn Header="#" IsReadOnly="True" Binding="{Binding LisXX[1]}"></DataGridTextColumn>
        </DataGrid>
于 2013-02-15T12:58:06.137 に答える