Как обновить многосвязывание вручную
У меня возникла проблема с Binding
. Свойство зависимости Rectangle.Fill
было привязано к ObservableCollection
с конвертером. Хотя ObservableCollection
реализует INotifyCollectionChanged
, привязка не обновлялась. Однако мне удалось решить эту проблему, присоединив мою делегацию к событию уведомления об изменении коллекции и обновив привязку вручную:
void ColorsCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
BindingExpression b = colorRectangle.GetBindingExpression(Rectangle.FillProperty);
if (b != null)
b.UpdateTarget();
}
В последнее время, однако, я изменил Binding
на MultiBinding
, и указанное решение перестало работать (b
- null
). Есть ли способ заставить MultiBinding
обновить свойство target?
С уважением - Spook.
Ответы
Ответ 1
Для многосвязного выражения привязка является MultiBindingExpression
, которая наследуется от BindingExpressionBase
, но не от BindingExpression
. Поэтому GetBindingExpression
возвращает значение null для многосвязного. Вместо этого вы можете использовать BindingOperations.GetMultiBindingExpression
:
MultiBindingExpression b = BindingOperations.GetMultiBindingExpression(colorRectangle, Rectangle.FillProperty);