【发布时间】:2010-01-25 01:04:38
【问题描述】:
我有一个自定义对象的列表:比如 Fruits 具有两个字符串属性 Name 和 Color。这些都在一个列表中。
private readonly List<Fruit> fruitList = new List<Fruit>();
然后我将水果对象加载到列表中。
我正在尝试将此列表绑定到 WPF Datagrid:
C#:
dgFruit.ItemsSource = "{Binding}";
XAML:
<toolkit:DataGrid Name="dgFruit"
ItemsSource="{Binding Path=fruitList}" >
<toolkit:DataGrid.Columns>
<toolkit:DataGridComboBoxColumn
Header="Name"
SelectedValueBinding="{Binding Path=Name}"
TextBinding="{Binding Path=Name}" Width="5*" />
<toolkit:DataGridComboBoxColumn
Header="Color"
SelectedValueBinding="{Binding Path=Color}"
TextBinding="{Binding Path=Color}" Width="5*" />
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
他们在组合框中的原因是因为我希望用户能够更改关系。这不是真实的例子,但你明白了。举例来说,水果没有成熟,所以他们把香蕉颜色变成绿色:)
我没有任何运气在数据网格中获取这些项目......并且沿着轨道,我希望单击数据网格单元中的项目以更改为组合框并显示所有可能类型的水果名称和颜色(所以他们可以改变关系)
这是我遇到的错误:
System.Windows.Data Error: 39 : BindingExpression path error: 'Color' property not found on 'object' ''Char' (HashCode=6750311)'. BindingExpression:Path=Color; DataItem='Char' (HashCode=6750311); target element is 'TextBlockComboBox' (Name=''); target property is 'Text' (type 'String')
有人可以帮忙吗?我在 xaml 中设置列的原因是我可以将宽度设置为星形大小并使列的宽度相等。
我看到大多数示例都使用 ObservableCollection,但如果我可以绑定到列表,为什么我必须使用它?
如果我的示例需要进一步说明,请告诉我
编辑:我现在拥有的:
XAML:
<toolkit:DataGrid Name="dgFruit"
ItemsSource="{Binding}"
AutoGenerateColumns="False">
<toolkit:DataGrid.Columns>
<toolkit:DataGridTextColumn
Header="Name"
Width="5*"/>
<toolkit:DataGridComboBoxColumn
Header="Color"
Width="5*"/>
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
C#:
DataContext = fruitList;
实际上,当我使用 DataContext 时,我没有得到任何项目。当我使用 ItemSource 时,我得到空行,但行数正确,所以这似乎更符合正确的行。
如果我让它自动生成列,我可以让数据显示出来。如果我将 autogeneratecolumns 设置为 false,然后在 xaml 中指定我的列,就像我想使用星号大小一样,我会得到正确的列数,但没有文本!
【问题讨论】:
标签: c# wpf visual-studio-2008 list datagrid