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;
        }

首先,如果您使用的方法直接访问数据杂志属性而不是使用数据绑定,则应使用datagrid.items属性,而不是datagrid.itemssource。<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<</p>

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

,但是无论如何您都会得到空行,因为数据杂志无法使用正确的列定义将行中的每个字符串链接起来。

我认为最好的方法是使用转换器:

创建从ivalueconverter继承的RowindexConverter类,并使您的转换方法看起来像这样:

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属性的绑定,例如我们的数据杂志的行,并将索引作为转换式参数传递。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 voila!出现的值。如果您想要更多列,则只需添加它们并递增转换式参数。请小心,因为如果行不够长,转换器将抛出异常!

相关内容

  • 没有找到相关文章

最新更新