Перепривязать все свойства всех элементов в визуальном дереве? - PullRequest
2 голосов
/ 13 июля 2010

Я знаю, что могу перепривязать все экземпляры определенного свойства для определенного типа элемента, как в этом методе, который перепривязывает свойство Text всех текстовых блоков.

public void Rebind()
{
  foreach (var textBlock in LayoutRoot.GetDescendents().OfType<TextBlock>())
  {
    BindingExpression bindExp = textBlock.GetBindingExpression(TextBlock.TextProperty);
    if (bindExp != null)
    {
      Binding bind = bindExp.ParentBinding;
      textBlock.SetBinding(TextBlock.TextProperty, bind);
    }
  }
}

Что я хочу сделать, так это перепривязать все свойства, которые имеют привязки для всех элементов визуального дерева. Более конкретно, я хотел бы перепривязать все привязки, которые используют конкретный преобразователь значений. Как я могу это сделать?

1 Ответ

1 голос
/ 13 июля 2010

Это реально не достижимо, поскольку FrameworkElement не предоставляет способа перечислить набор выражений привязки, которые в настоящее время применяются к нему.

Для этого вам необходимо сначала собрать все свойства зависимостей, которые могут применяться (по крайней мере, для каждого типа элемента, но это добавляет дополнительные сложности), а затем попытаться GetBindingExpression для каждого элемента. Очень уродливый и очень медленный.

Время разработать это требование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...