所以我有一个数据网格,它的SourceItem结构是未知的,但是需要细微调整...我正在使用AutoGenerateColumns,但是对于其中一种数据类型,我使用dg_AutoGeneratingColumn事件用自己的列覆盖了其中, e.PropertyType,并使用我的新ColumnTemplate(继承自DataGridBoundColumn)重写e.Column。
通常来说,它可以执行并呈现良好的效果,只是我试图使数据绑定(路径未知)流入我的自定义ColumnTemplate。
CustomTemplate : DataGridBoundColumn
{
public static DependencyProperty dpblah;
private void MyCode() { GetValue(dpBlah); }
}
DataGrid_AutoGeneratingColumn(...) {
var oldBinding = (e.Column as DataGridBoundColumn).Binding;
e.Column = new CustomTemplate { Header = e.PropertyName };
BindingOperations.SetBinding(e.Column, dpBlah, oldBinding);
}
一切似乎都在运行,但是当MyCode()运行时,GetValue将一无所有。
有什么我想念的吗?为什么不能从绑定中获取值?
答案 0 :(得分:0)
您可以将属性设置为绑定的路径,然后在CustomTemplate
类中创建可视元素时使用此路径:
var oldBinding = (e.Column as DataGridBoundColumn).Binding as Binding;
e.Column = new CustomTemplate { Header = e.PropertyName, dpblah = oldBinding?.Path?.Path; };
然后在CustomTemplate
中,您可以使用反射来获取特定项目的属性值,例如:
protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
{
string bindingPath = dpblah;
object value = dataItem.GetType().GetProperty(bindingPath).GetValue(dataItem);
...
}
如果dataItem
是DataRowView
,则不必使用反射:
DataRowView drv = dataItem as DataRowView;
if(drv != null)
{
object value = drv[bindingPath];
}