我需要访问DataGridTextColumn中DataGrid单元格的绑定表达式。例如:
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
我设法让TextBlock与单元格相关联:
var cell = dataGrid.GetCellCtrl<TextBlock>(dataGrid.CurrentCell);
细胞似乎是正确的。我可以打电话
cell.SetValue(TextBlock.TextProperty, value);
更新单元格文本。它似乎在网格上工作(更新号码)。但是,正如我在一段时间后意识到的那样,源代码没有得到更新。即使我将UpdateSourceTrigger转换为PropertyChange也没有用。然后,我认为我需要获取绑定表达式并显式调用UpdateSource。
var bindingExpr = cell.GetBindingExpression(TextBlock.TextProperty);
但bindingExpr始终为null。为什么呢?
编辑: 我遇到的最初问题是我可以获取单元格的绑定TextBlock,并设置TextBlock.TextProperty。但是,源不会更新。我正试图解决这个问题。
答案 0 :(得分:5)
TextBox
中的DataGridTextColumn
将没有列本身具有绑定的绑定表达式。
DataGridTextColumn
派生自DataGridBoundColumn
使用BindingBase
属性而不是TextBlock.TextProperty
,但Binding
属性不是DependancyProperty
,所以你必须使用普通的公共属性访问。
因此,Binding
中的DataGridTextColumn
属性为BindingBase
,因此您必须进行一些转换。
这样的事情应该有效(未经测试)
var binding = (yourGrid.Columns[0] as DataGridBoundColumn).Binding as Binding;
答案 1 :(得分:0)
您需要找到if (pattern) {
results = search(pattern);
print(results);
}
else {
print(OVERVIEW_TABLE)
}
:
TextBlock
var textBlock = cell.FindVisualChild<TextBlock>();
BindingExpression bindingExpression = textBlock.GetBindingExpression(
TextBlock.TextProperty);
的代码:
FindVisualChild()
答案 2 :(得分:-2)
TextBox t = e.EditingElement as TextBox; string b = t.GetBindingExpression(TextBox.TextProperty).ResolvedSourcePropertyName;