如何在WPF中将数组列表绑定到DataGrid

时间:2018-12-14 03:46:31

标签: c# wpf

我有包含双精度类型数据的数组列表。我试图将此列表直接绑定到 datagrid.itemsource ,但是datagrid不显示任何数据,而是显示列表项的属性,例如项长,数据类型等。

如果不将此数组列表转换为2D数组,仍然有可能在datagrid中显示此列表。

此外,我还想更新此datagrid eveytime,以引入新的列表项。我应该如何实现它。

谢谢

2 个答案:

答案 0 :(得分:0)

您应该在问题中添加代码的某些部分,以便我们了解您当前正在做什么,我假设您正在执行MVVM,并且您已经实现了ViewModel。

如果从ObservableCollection UI中自动插入或删除了新项目,则应使用ObservableCollection<double[]>而不是List<double[]>。在您的视图模型中放置一个ObservableCollection<double[]>,例如:

public ObservableCollection<double[]> Collection
{
    set
    {
        collection= value;
        OnPropertyChanged("Collection");
    }
    get { return collection; }
}

,然后您的用户界面应类似于:

<DataGrid ItemsSource={Binding Collection, UpdateSourceTrigger=PropertyChanged}>
    <DataGrid.Columns>
         <DataGridTemplateColumn>
              <DataGridTemplateColumn.CellTemplate>
                     <DataTemplate>
                           <ListBox ItemsSource="{Binding}">
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                         <TextBlock Text={Binding} Margin="5,0"/>
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                           </ListBox>
                     </DataTemplate>
              </DataGridTemplateColumn.CellTemplate>
          </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

答案 1 :(得分:0)

  

如果不将此数组列表转换为2D数组,仍然有可能在datagrid中显示此列表。

是的,但是您需要自己明确创建列。考虑以下示例:

double[] row1 = new double[4] { 1, 2, 3, 4 };
double[] row2 = new double[4] { 5, 6, 7, 8 };
double[] row3 = new double[4] { 1, 3, 2, 1 };
List<double[]> sourceCollection = new List<double[]> { row1, row2, row3 };
dataGrid.ItemsSource = sourceCollection;
for (int i = 0; i<sourceCollection[0].Length; ++i)
    dataGrid.Columns.Add(new DataGridTextColumn { Binding = new Binding("[" + i.ToString() + "]") });

XAML:

<DataGrid x:Name="dataGrid" AutoGenerateColumns="False" />
  

此外,我还想更新此datagrid eveytime,以引入新的列表项。我应该如何实现它。

List<double[]>替换为ObservableCollection<double[]>。然后,您将能够动态地向double添加新行(ObservableCollection<double[]>数组),并在DataGrid中看到它们。