And*_*y T 18 c# wpf binding datagrid datagridtemplatecolumn
我试图获取与特定关联的属性的名称DataGridColumn,以便我可以基于此做一些事情.当用户单击列标题上的上下文菜单项时,将调用此函数...
对于开箱即用的现成滚动列类型来说这很好DataGridTextColumn,因为它们是绑定的,但问题是我的一些列DataGridTemplateColumns是未绑定的.
private void GroupByField_Click (object sender, RoutedEventArgs e){
MenuItem mi = (MenuItem)sender;
ContextMenu cm = (ContextMenu) mi.Parent;
DataGridColumnHeader dgch = (DataGridColumnHeader) cm.PlacementTarget;
DataGridBoundColumn dgbc = (DataGridBoundColumn) dgch.Column;
Binding binding = (Binding) dgbc.Binding;
string BoundPropName = binding.Path.Path;
//Do stuff based on bound property name here...
}
Run Code Online (Sandbox Code Playgroud)
所以,以我的Name专栏为例......它是一个DataGridTemplateColumn(因为它有一个图像和其他一些东西).因此,它实际上并没有绑定到'Name'属性...但我希望如此,以便上面的代码可以工作.
我的问题是两部分的,真的:
是否有可能成为一个DataGridTemplateColumnBOUND,以便上述代码可以工作?我能以某种方式将它绑定到一个属性吗?
或者我需要完全不同的东西,并更改上面的代码?
提前致谢!
在
ran*_*eur 33
虽然您无法绑定模板列,但您可以绑定该列中保存的其中一个控件.这就是我解决类似问题的方法:
<DataGridTemplateColumn Header="ColumnHeader">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<local:CustomisedUIElement Text="{Binding Path=PropertyToBindTo}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
如果我已经正确理解了初始示例,这将意味着更改GroupByField_Click()方法的逻辑以检查发送列是否是模板列,然后查看它包含的元素以获取Binding对象.
不,因为DataGridTemplateColumn不继承自DataGridBoundColumn,所以转换为DataGridBoundColumn将会失败。
为了使上面的代码工作,所有列都必须从DataGridBoundColumn抽象类继承。因此,制作自定义派生 Column 类而不是DataGridTemplateColumn应该可行。
你可以简单地填充一个
Dictionary<DataGridColumn, string> BoundPropName;
初始化然后做
var propName = BoundPropName[dgch.Column]
| 归档时间: |
|
| 查看次数: |
62414 次 |
| 最近记录: |