Можно ли «обновить» привязки данных WPF
-
19-08-2019 - |
Вопрос
У меня есть xaml TabControl, и на одной странице есть 3 RadioButton, каждый из которых привязан к другому свойству выбранного значения соседнего ListView. После переключения между выбранными элементами в ListView мои переключатели, кажется, забывают, что они связаны и не обновляются.
Итак, наблюдая за этим в отладчике, когда я переключаюсь на новый выбранный элемент, я вижу, что не пользовательский код сначала проверяет значение во всех 3 свойствах, затем только в первых двух и, в конечном итоге, только в первом. Однако, если я изменю вкладку и вернусь обратно, это, похоже, даст мне еще несколько вариантов использования.
Сама привязка довольно проста. Двухстороннее связывание свойства bool с IsChecked. Это 4 уровня глубины (Path = DataModel.Selected.A.B), но у меня есть другие вещи на той же глубине, которые отлично работают.
Люди слышали об этом и знали, что может происходить? Или, если привязка как-то забыта, есть ли способ явно напомнить xaml?
Решение 2
Похоже, это известная проблема:
http: / /social.msdn.microsoft.com/forums/en-US/wpf/thread/8eb8280a-19c4-4502-8260-f74633a9e2f2/ р>
Короче говоря, кнопка RadioButton (через .Net 3.5sp1) каким-то образом уничтожает привязки других кнопок RadioButton, когда проверяется при попытке снять отметку с любых других кнопок. Простое исправление (читай: hack) состоит в том, чтобы назначить каждой радиокнопке другое GroupName, а затем они не пытаются связываться друг с другом
Другие советы
Можно вручную обновить привязки, например, так:
TestCheckBox
.GetBindingExpression(CheckBox.IsCheckedProperty)
.UpdateTarget();
При этом я не уверен на 100%, что это исправит вашу основную проблему. У меня не было подобных проблем с привязками WPF, но у меня была пара странных проблем с элементом управления вкладками.
Другой способ решить эту проблему - подделать список свойств в ListBox и сделать радиокнопку с шаблоном ListBoxItem.