Подтвердить что ты не робот

Как обновить многосвязывание вручную

У меня возникла проблема с 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.

4b9b3361

Ответ 1

Для многосвязного выражения привязка является MultiBindingExpression, которая наследуется от BindingExpressionBase, но не от BindingExpression. Поэтому GetBindingExpression возвращает значение null для многосвязного. Вместо этого вы можете использовать BindingOperations.GetMultiBindingExpression:

MultiBindingExpression b = BindingOperations.GetMultiBindingExpression(colorRectangle, Rectangle.FillProperty);