重新绑定可视树中所有元素的所有属性?

时间:2010-07-13 09:32:50

标签: silverlight data-binding

我知道我可以为特定类型的元素重新绑定特定属性的所有实例,就像重新绑定所有Textblock的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 个答案:

答案 0 :(得分:1)

由于FrameworkElement无法枚举当前适用于它的绑定表达式集,因此这实际上不可行。

为了实现这一点,您需要首先收集可能适用的所有依赖项属性(至少在每个元素类型但是会增加更多复杂性),然后在每个元素上尝试GetBindingExpression。真实的丑陋和真正的慢。

时间设计此要求。