WPF - 如何绑定DataGridTemplateColumn

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'属性...但我希望如此,以便上面的代码可以工作.

我的问题是两部分的,真的:

  1. 是否有可能成为一个DataGridTemplateColumnBOUND,以便上述代码可以工作?我能以某种方式将它绑定到一个属性吗?

  2. 或者我需要完全不同的东西,并更改上面的代码?

提前致谢!

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对象.


maj*_*cha 0

  1. 不,因为DataGridTemplateColumn不继承自DataGridBoundColumn,所以转换为DataGridBoundColumn将会失败。
    为了使上面的代码工作,所有列都必须从DataGridBoundColumn抽象类继承。因此,制作自定义派生 Column 类而不是DataGridTemplateColumn应该可行。

  2. 你可以简单地填充一个

    Dictionary<DataGridColumn, string> BoundPropName;

    初始化然后做

    var propName = BoundPropName[dgch.Column]