我已经被困在这几天了,我自己找不到解决方案。我正在尝试使用List<Plants>
作为ItemsSource填充DataGrid。问题是,类型Plant
有一个ICollection<PlantType>
类型的成员,我需要在DataGrid的相应列中显示为一个字符串,其中ICollection中的每个项目都在这样的新行上:
"Type1, \n Type2, \n ..."
我将在这里显示简化代码(复制整个代码会过度使用它。)
public partial class Plants
{
public Plants()
{
PlantType = new HashSet<PlantType>();
}
public int ID { get; set; }
public string Name { get; set; }
public int Page { get; set; }
public virtual ICollection<PlantType> PlantType { get; set; }
}
请注意,PlantType
包含Type
列(不是Plant
)。现在我想用这些信息填充DataGrid,理想情况下它看起来像这样:
-----------------------------------------
| Name | Page | Type |
|---------------------------------------|
| plant1 | 3 | supporting |
|---------------------------------------|
| pla2 | 13 | not-supporting |
|---------------------------------------|
| | | test |
|---------------------------------------|
| | | also this type |
|---------------------------------------|
| | | type |
|---------------------------------------|
| plantZ | 40 | test |
-----------------------------------------
目前的问题是,它只填写名称和页面(因为那些不是HashSets,因此很清楚)。这就是我填充DataGrid的代码的样子:
private void BuildDataGridContent(List<Plants> lList)
{
dataGrid.IsReadOnly = true;
dataGrid.AutoGenerateColumns = false;
dataGrid.ItemsSource = lList;
DataGridTextColumn textColumn1 = new DataGridTextColumn();
DataGridTextColumn textColumn2 = new DataGridTextColumn();
DataGridTextColumn textColumn3 = new DataGridTextColumn();
textColumn1.Header = "Name";
textColumn1.Binding = new Binding("Name");
textColumn2.Header = "Page";
textColumn2.Binding = new Binding("Page");
textColumn3.Header = "Type";
textColumn3.Binding = new Binding("Type"); // <-- the problem is here. It can't directly access lList.PlantType.Type (PlantType = Table name; Type = column name in the SQL DB)
dataGrid.Columns.Add(textColumn1);
dataGrid.Columns.Add(textColumn2);
dataGrid.Columns.Add(textColumn3);
}
我已经尝试了一些东西,但已经没有想法和谷歌搜索条款了。有人可以告诉我如何以这种方式正确地将Type
绑定到列上吗?
答案 0 :(得分:0)
一个相当简单的解决方案可能是引入PlantViewModel
类型来绑定到每个DataGrid行,而不是直接绑定到您的数据模型类型(Plant
)。这当然需要在视图模型中重新定义一些也在数据模型中的属性,并引入从Plant
到PlantViewModel
的映射逻辑,并且可能反过来(如果您的视图是可编辑的)但它会促进数据模型和视图之间的松散耦合。