Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > WPF и Silverlight > обновить Source of Binding из кода |
Автор: sealmu 13.11.2011, 00:03 | ||
у меня есть UserControl с 2-мя DependencyProperty:
который я использую в XAML : <local:Observer In="{Binding ElementName=tb, Path=Text}" Out="{Binding ElementName=tb2, Path=Tag}"></local:ComboObserver> Я хочу при изменении In -> поменять свойство привязоное к Out но если я меняю Out, просто теряеться Binding. Как обновлять привязаное к Out свойство? |
Автор: Gvozdin 13.11.2011, 00:21 |
Помоему надо использовать метод DependencyObject.SetCurrentValue если не он, то пожже погляжу точнее |
Автор: sealmu 13.11.2011, 00:39 |
Я пробую так : private static void InChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { broker DP = (broker)sender; if (DP != null) { DP.SetCurrentValue(OutProperty, DP.In); BindingExpression b = DP.GetBindingExpression(OutProperty); if (b != null) b.UpdateSource(); } } не обновляет! (хотя в In и содержиться значение) |
Автор: Gvozdin 14.11.2011, 15:34 | ||||
А зачем для OutProperty говорить UpdateSource? Вы байндинг такой случаем не ставите this.SetBinding(OutProperty, <binding>)? У меня вот собственно все работает, можете сами попробовать:
Скорее дело где-то в вашем коде. По крайней мере уберите UpdateSource. |
Автор: sealmu 19.11.2011, 12:08 |
Нет не так! У меня наоборот. в этом коде привязка от textbox ------> к Test property и обновление идет от Test --------> к testbox [source ----> target] у меня же : привязка от MyProperty (через SetBinding) ------> к textbox обновление идет от MyProperty --------> к testbox [target ---> source] |
Автор: Gvozdin 19.11.2011, 14:39 | ||||
Вот пожалуйста в обратную сторону:
Все работает хоть в какую сторону. Я думаю что-то надо смотреть в сторону local:Observer. Байндинг может отваливаться если: 1. ClearBinding и наверное ClearValue какое-нибдуь 2. Устанавливаем новый байндинг 3. Бывают тупые случаи когда OneWay байндинг отваливается когда ему захочется, попробуйте везде поставить явно TwoWay |