5
Formdaki tüm bağlamalar için UpdateSource nasıl çağrılır?Formdaki tüm bağlamalar için UpdateSource nasıl çağrılır?
Formdaki tüm bağlamalar için UpdateSource nasıl çağrılır?Formdaki tüm bağlamalar için UpdateSource nasıl çağrılır?
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.
Güzel. Ama bu Silverlight'ta çalışmanın bir yolu var mı? – user626528
Doğru, Silverlight'ta çalışan bir versiyonunu da görmek isterim. – Telaclavo
Ü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. –