如何在WPF中获取DataGrid列的绑定表达式?
这是专栏的XAML:
<DataGridTextColumn x:Name="amountColumn" Header="Amount" Width="100"
Binding="{Binding _Amount, StringFormat=c}"
CellStyle="{StaticResource errorStyle}"/>
答案 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);