2013-02-07 75 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>