我有包含双精度类型数据的数组列表。我试图将此列表直接绑定到 datagrid.itemsource ,但是datagrid不显示任何数据,而是显示列表项的属性,例如项长,数据类型等。
如果不将此数组列表转换为2D数组,仍然有可能在datagrid中显示此列表。
此外,我还想更新此datagrid eveytime,以引入新的列表项。我应该如何实现它。
谢谢
答案 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
中看到它们。