Как обновить multibinding вручную - PullRequest
12 голосов
/ 07 апреля 2011

У меня была проблема с 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 обновить целевое свойство?

С наилучшими пожеланиями - Spook.

1 Ответ

25 голосов
/ 07 апреля 2011

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

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