使用binding-WPF设置数据网格列号

时间:2013-02-07 11:20:10

标签: wpf list datagrid

我有一个DataGrid,他的一个列应该得到Grid中行的序列号,DataGrid绑定到以下列表:

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

xx类包含几个绑定到其余列的变量。

如何将列表中列的编号绑定到DataGrid中的列?

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

您提供的信息有限。我假设您正在尝试将列表绑定到WPF网格。您可以使用下面列出的内容。

this.dataGrid1.ItemsSource = list;

还有一件事是确保在XAML AutoGenerateColumn中设置为true。

如果这不起作用。发布更多信息,例如您的XML如何以及如何尝试在代码中绑定它。

答案 2 :(得分: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>