Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 将datagrid绑定到每个单元格一个对象_Wpf_Binding_Datagrid_Wpftoolkit - Fatal编程技术网

Wpf 将datagrid绑定到每个单元格一个对象

Wpf 将datagrid绑定到每个单元格一个对象,wpf,binding,datagrid,wpftoolkit,Wpf,Binding,Datagrid,Wpftoolkit,我想将一些对象绑定到WPF中的datagrid。我非常希望避免使用DataTable 考虑以下代码: public ObservableCollection<ObservableCollection<DataPoint>> GridItems { get; set; } public class DataPoint : INotifyPropertyChanged { public float Value { get; set; } public flo

我想将一些对象绑定到
WPF
中的
datagrid
。我非常希望避免使用DataTable

考虑以下代码:

public ObservableCollection<ObservableCollection<DataPoint>> GridItems { get; set; }

public class DataPoint : INotifyPropertyChanged
{
    public float Value { get; set; }
    public float OriginalValue { get; set; }
    public bool Highlighted { get; set; }
    public SolidColorBrush HighlightColor { get; set; }
    ...
}
公共ObservableCollection GridItems{get;set;} 公共类数据点:INotifyPropertyChanged { 公共浮点值{get;set;} 公共浮点原始值{get;set;} 公共布尔突出显示{get;set;} 公共SolidColorBrush HighlightColor{get;set;} ... } XAML:


当我们将其绑定到一个
DataGrid
而不是每个单元格获得一个DataPoint对象时,我们会得到一列
Count
,如图所示。我尝试过2D数组、自定义类型(继承自
ObservableCollection
)、
HierarchycalDataTemplate
,但似乎没有任何效果


我之前不知道会有多少列,但每行的数字和类型总是相同的。有任何建议吗?

< P>如果你考虑你的代码> ItassStase,<代码> ExababelCopys<代码> > StababCeleCopys< /Cord>S,那么你将认识到网格中的每一行只是一个<代码> StababCeleCopy< /Cord>对象。
DataGrid
不够聪明,无法查看集合内部的每个项目(而且没有意义-每个集合中可能有不同数量的项目,因此无法自动将项目映射到列)。它将只查看作为行的
DataContext
的对象,并将公共属性用作列(在本例中,
observedcollection
唯一符合条件的属性是
Count

编辑:我刚刚想起了接口,它允许更复杂的绑定场景(我相信这就是
DataTable
为绑定目的而将列作为属性公开的方式。请查看有关
IBindingList
的信息以及它如何被证明是有用的。您可以创建一个自定义类,该类派生自
observedcollection
,并实现
IBindingList
,以公开数据点作为属性

原件:

由于您不知道将有多少列,因此无法通过XAML对它们进行声明性数据绑定。我相信您需要在代码中手动创建列,并为每个列设置绑定


此外,您还需要一个数据点类型的
DataTemplate
,以便它知道如何直观地显示该类型。

是否自动生成这些列?根据Brian的回答,您是如何解决问题的?
<toolkit:DataGrid ItemsSource="{Binding GridItems}" />