如何获取datagrid列的绑定表达式?

时间:2014-04-28 15:37:11

标签: c# wpf binding datagrid

如何在WPF中获取DataGrid列的绑定表达式?

这是专栏的XAML:

<DataGridTextColumn x:Name="amountColumn" Header="Amount" Width="100"  
                    Binding="{Binding _Amount, StringFormat=c}" 
                    CellStyle="{StaticResource errorStyle}"/>

3 个答案:

答案 0 :(得分:3)

我使用此代码获取数据网格中的所有绑定表达式:

private Collection GetAllBindingsInDatagrid(DataGrid dg)
{
    Collection bindings = new Collection();
    if (dg.ItemsSource != null) {
        foreach (object item in dg.ItemsSource) {
            DataGridRow row = dg.ItemContainerGenerator.ContainerFromItem(item);
            if (row != null) {
                foreach (BindingExpression binding in row.BindingGroup.BindingExpressions) {
                    bindings.Add(binding);
                }
            }
        }
    }
    return bindings;
}

编辑:由于问题是获取列的“绑定表达式”,它指的是绑定的单个实例,我认为目的是检查是否存在任何验证错误或其他内容,因此上面的函数迭代行。但是如果需要列本身的通用“绑定”(例如,为了动态添加验证规则),可以使用此代码:

// first retrieve the Datagrid object as datagrid
DataGridTextColumn column = datagrid.FindName("amountColumn");
Binding binding = column.Binding;

答案 1 :(得分:0)

df[field].apply(lambda x: True if any (word in x for word in pattern.lower().split('|')) else False)对象在BindingExpression元素上,而不在列上。首先,您需要获得一个单元。然后,您可以搜索内部的TextBlock

TextBlock

var textBlock = cell.FindFirstVisualChild<TextBlock>(); BindingExpression bindingExpression = textBlock.GetBindingExpression(TextBlock.TextProperty); 的代码:

FindFirstVisualChild()

答案 2 :(得分:-1)

您使用BindingExpression

BindingExpression bindingExpression = amountColumn.GetBindingExpression(DataGridTextColumn.BindingProperty);