Если вы повысите PropertyChanged
с PropertyChangedEventArgs
, который имеет параметр null
или String.Empty
, привязки всех свойств обновятся.
[ MSDN Reference ]
Сделать это наоборот намного сложнее и, вероятно, потреблять больше производительности, я думаю. Вам нужно будет проверить каждый DependencyProperty каждого DependencyObject во всем окне на наличие привязок.
Редактировать: Написал следующий схематичный метод расширения, который делает то, что вы просили, он ужасно неэффективен (возможно, есть возможности для улучшения, но вы все еще работаете с алгоритмом значительной сложности):
public static void UpdateAllBindings(this DependencyObject o)
{
//Immediate Properties
List<FieldInfo> propertiesAll = new List<FieldInfo>();
Type currentLevel = o.GetType();
while (currentLevel != typeof(object))
{
propertiesAll.AddRange(currentLevel.GetFields());
currentLevel = currentLevel.BaseType;
}
var propertiesDp = propertiesAll.Where(x => x.FieldType == typeof(DependencyProperty));
foreach (var property in propertiesDp)
{
BindingExpression ex = BindingOperations.GetBindingExpression(o, property.GetValue(o) as DependencyProperty);
if (ex != null)
{
ex.UpdateTarget();
}
}
//Children
int childrenCount = VisualTreeHelper.GetChildrenCount(o);
for (int i = 0; i < childrenCount; i++)
{
var child = VisualTreeHelper.GetChild(o, i);
child.UpdateAllBindings();
}
}