2012-10-30 23 views
2

我不想使用類屬性進行綁定。WPF DataGrid綁定的字符串行列表

爲什麼它不起作用?我如何解決這個問題。我得到空行。我也爲dataGrid手動定義了列。

private void Insert(IList<string> row, DataGrid dG) 
     { 
      ObservableCollection<IList<string>> data = dG.ItemsSource as ObservableCollection<IList<string>>; 
      data.Add(row); 
      dG.ItemsSource = data; 
     } 

對不起,我的英語。

問候。

回答

2

首先,如果您使用方法直接訪問您的DataGrid屬性而不是使用數據綁定,那麼您應該使用DataGrid.Items屬性,而不是DataGrid.ItemsSource。

private void Insert(IList<string> row, DataGrid dG) 
{ 
    dG.Items.Add(row); 
} 

但你無論如何得空行,因爲在DataGrid沒有每根弦的行中與正確的列定義鏈接的方式。

我認爲最好的辦法是使用轉換器:

創建RowIndexConverter類從的IValueConverter繼承,並讓你的轉換方法是這樣的:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    int index = System.Convert.ToInt32(parameter); 
    return (value as IList)[index]; 
} 

對於這個工作,你必須在綁定到IList屬性(如我們的DataGrid的行)中使用它,並將索引作爲ConverterParameter傳遞。 XAML會是這樣的:

<Window x:Class="Test.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:Test" 
    Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <local:RowIndexConverter x:Key="rowIndexConverter" /> 
    </Window.Resources> 
    <Grid> 
     <DataGrid x:Name="DataGrid"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Binding="{Binding ., Converter={StaticResource rowIndexConverter}, ConverterParameter=0}" /> 
       <DataGridTextColumn Binding="{Binding ., Converter={StaticResource rowIndexConverter}, ConverterParameter=1}" /> 
      </DataGrid.Columns> 
     </DataGrid> 
    </Grid> 
</Window> 

Et瞧!值顯示出來。如果你想要更多的列,你只需添加它們並增加ConvertParameter。要小心,因爲如果行不夠長,轉換器將拋出異常!