彼の列の1つがグリッド内の行のシリアル番号を取得すると思われるDataGridがあり、DataGridは次のリストにバインドされています。
public IList<xx> ListXX= new List<xx>();
xxクラスには、残りの列にバインドするいくつかの変数が含まれています。
リスト内の列の番号をDataGrid内の列にバインドするにはどうすればよいですか?
私はこの方法で問題を解決しました:
インデックスリストへのコンバーターを作成しました。
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>
あなたが提供した限られた情報で。リストをWPFグリッドにバインドしようとしていると想定しています。以下のように使用できます。
this.dataGrid1.ItemsSource = list;
もう1つは、XAMLでAutoGenerateColumnがtrueに設定されていることを確認することです。
これが機能しない場合。XMLがどのように見えるか、コードでXMLをバインドしようとしている方法などの詳細情報を投稿してください。
あなたがあなたの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>