Как программно получить выражение привязки из DataGridCheckBoxColumn - PullRequest
0 голосов
/ 27 мая 2020

Учитывая сетку данных с DataGridCheckBoxColumn, привязанную к логическому объекту

<datagrid .....>
<DataGrid.Columns>
   <DataGridCheckBoxColumn  Header="Issues"  Binding="{Binding HasIssue,UpdateSourceTrigger=PropertyChanged}" />
</DataGrid.Columns>

Как я могу программно получить выражение привязки, чтобы иметь возможность вызывать UpdateTarget ()?

ie.

   var expression = datagrid1.GetBindingExpression(DataGrid.**WhatProperty**);
    if (expression != null)
       expression .UpdateTarget();

Еще пробовал

var expression = BindingOperations.GetBindingExpression(datagrid1, ***`WhatDependencyObjectHere`***);

1 Ответ

1 голос
/ 27 мая 2020

Чтобы ответить на ваш точный вопрос, вам нужно получить фактическое CheckBox, которое генерирует DataGridCheckBoxColumn. Вот пример функции. Я не знаю, какой тип коллекции у вас ItemsSource, поэтому я назвал свою TestObject и установил ItemsSource на IList<TestObject>.

static void UpdateBindingTarget(DataGrid dg, DataGridCheckBoxColumn col, TestObject item)
{
    DataGridRow row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromItem(item);
    CheckBox cb = (CheckBox)col.GetCellContent(row);
    var be = cb.GetBindingExpression(CheckBox.IsCheckedProperty);
    if (be != null) { be.UpdateTarget(); }
}

Настоящий вопрос: почему вы хотели бы сделать это в первую очередь. Вышесказанное - не то, что я считаю хорошей практикой, это скорее хакерский обходной путь. Если вам нужен источник привязки для обновления цели, он должен либо наследовать DependencyObject и использовать DependencyProperty, либо реализовать INotifyPropertyChanged и вызвать событие PropertyChanged.

...