2011-03-01 15 views

cevap

10

Bir süre önce bu görev için bir sürü yardımcı yazdım.

public static void UpdateAllBindingSources(this DependencyObject obj) 
{ 
    foreach (var binding in obj.GetAllBindings()) 
     binding.UpdateSource(); 
} 

public static IEnumerable<BindingExpression> GetAllBindings(this DependencyObject obj) 
{ 
    var stack = new Stack<DependencyObject>(); 

    stack.Push(obj); 

    while (stack.Count > 0) 
    { 
     var cur = stack.Pop(); 
     var lve = cur.GetLocalValueEnumerator(); 

     while (lve.MoveNext()) 
      if (BindingOperations.IsDataBound(cur, lve.Current.Property)) 
       yield return lve.Current.Value as BindingExpression; 

     int count = VisualTreeHelper.GetChildrenCount(cur); 
     for (int i = 0; i < count; ++i) 
     { 
      var child = VisualTreeHelper.GetChild(cur, i); 
      if (child is FrameworkElement) 
       stack.Push(child); 
     } 
    } 
} 

Sonra sadece kendi penceresinden

this.UpdateAllBindingSources();
arayıp bitirdiniz.

+1

Güzel. Ama bu Silverlight'ta çalışmanın bir yolu var mı? – user626528

+0

Doğru, Silverlight'ta çalışan bir versiyonunu da görmek isterim. – Telaclavo

+0

Üzgünüm, bu çözümü Silverlight'a taşımanın kolay bir yolunu bulamadım. Daha çok bir WPF dev varım, bu yüzden SL özelliklerine dair bilgim oldukça sınırlıdır. –

İlgili konular