2013-02-07 73 views
3

我有一个DataGrid,他的一列应该得到的网格行的序列号,将DataGrid绑定到下面的列表中设置数据网格列数:与绑定WPF

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

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

如何将列表中列的数量绑定到DataGrid中的列中?

+0

你的问题是非常不清楚的......你能提供一个更完整的例子,你的数据是怎么样的,以及在datagrid中有什么列? – nemesv

回答

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

由于您提供的信息有限。我假设你正试图将列表绑定到你的WPF网格。你可以使用下面列出的。

this.dataGrid1.ItemsSource = list; 

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

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

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>