У меня очень странная проблема. Если я установил привязку и изменил привязку на другое свойство, это не сработает.
Взгляните на этот простой пример
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 () )?
Спасибо за любую помощь ...
1 ответ
Как объявлено в методе FrameworkElement.SetBinding:
Примечание . Вызов метода SetBinding и передача нового Привязка не обязательно удалит существующую привязку. Вместо этого вы должны сначала вызвать 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 .
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.