2016-12-23 4 views
0

У меня очень странная проблема. Если я установил привязку и изменил привязку к другому свойству, это не сработает.UWP: Замена привязки данных

Посмотрите на этом простом примере

lblTotal.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("Subtotal"), Source = Order, Mode = BindingMode.OneWay }); 
lblTotal.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("FinalTotal"), Source = Order, Mode = BindingMode.OneWay }); 

Когда FinalTotal изменяется, текст lblTotal будет НЕ быть изменен.

Теперь прокомментировал первую строку.

//lblTotal.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("Subtotal"), Source = Order, Mode = BindingMode.OneWay }); 
lblTotal.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("FinalTotal"), Source = Order, Mode = BindingMode.OneWay }); 

СЕЙЧАС ЭТО РАБОТАЕТ !!!! Изменение FinalTotal изменит текст lblTotal! Любая идея почему?

Также BindingOperations.ClearBinding() не доступен в UWP. Поэтому я попытался заменить его пустым связыванием, и он все еще не работает.

lblTotal.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("Subtotal"), Source = Order, Mode = BindingMode.OneWay }); 

//remove binding - not sure if this is correct way to remove binding because 
//BindingOperations.ClearBinding() isn't available in UWP! 
BindingOperations.SetBinding(lblTotal, TextBlock.TextProperty, new Binding()); 

lblTotal.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("FinalTotal"), Source = Order, Mode = BindingMode.OneWay }); 

Мои вопросы: 1. Как заменить связывание в UWP? 2. Как удалить существующее привязку в UWP (т.е. эквивалентную функцию для BindingOperations.ClearBinding())?

Спасибо за любую помощь ...

+0

Просто quess - может быть изменение BindingMode to TwoWay? – Sasha

+0

Привет, Sasha, я пробовал это, но он все еще не работает :( – Sam

+0

Должны быть установлены привязки к ошибкам для «Субтитры». В окне вывода отображаются ошибки привязки? – Sasha

ответ

3

Как заявлено в FrameworkElement.SetBinding method:

Примечание Вызов SetBinding метод и переходя в новый Binding объект не обязательно удалить существующая привязка. Вместо этого сначала необходимо вызвать метод DependencyObject.ClearValue, а затем позвонить SetBinding.

Таким образом, вы можете изменить ваш код следующим образом:

lblTotal.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("Subtotal"), Source = Order, Mode = BindingMode.OneWay }); 
lblTotal.ClearValue(TextBlock.TextProperty); 
lblTotal.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("FinalTotal"), Source = Order, Mode = BindingMode.OneWay }); 

После этого ваш код должен быть в состоянии работать. Для получения дополнительной информации см. Примечания от FrameworkElement.SetBinding, а также BindingOperations.SetBinding.

+0

Спасибо, Джей, я не тестировал этот код, но он выглядит хорошо. Попробует, когда вернусь к работе и отчитаюсь, если возникнут проблемы! – Sam

+0

Джей, это сработало! Извините за поздний ответ! кс! – Sam