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}" />