首先,如果您使用方法直接訪問您的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。要小心,因爲如果行不夠長,轉換器將拋出異常!