Можно ли «обновить» привязки данных WPF

У меня есть xaml TabControl, и на одной странице есть 3 RadioButton, каждый из которых привязан к другому свойству в выбранном значении соседнего ListView. После переключения между выбранными элементами в ListView мои переключатели, кажется, забывают, что они связаны, и не обновляются.

Поэтому, наблюдая за этим в отладчике, когда я переключаюсь на новый выбранный элемент, я вижу, что не пользовательский код сначала проверяет значение всех трех свойств, затем только первых двух и, наконец, только первого. Однако, если я изменю вкладку и вернусь обратно, это, кажется, даст мне еще несколько применений.

Сама привязка довольно проста. Двухсторонняя привязка свойства bool к IsChecked. Это 4 уровня глубины (Path = DataModel.Selected.A.B), но у меня есть другие вещи той же глубины, которые работают нормально.

Люди слышали об этом и знают, что может происходить? Или, если привязка каким-то образом забывается, есть ли способ явно напомнить xaml?


person Community    schedule 18.03.2009    source источник
comment
После дальнейшего исследования с помощью Snoop я действительно могу наблюдать, как привязка исчезает после нескольких изменений выбора.   -  person    schedule 18.03.2009


Ответы (3)


Привязки можно обновить вручную следующим образом:

TestCheckBox
    .GetBindingExpression(CheckBox.IsCheckedProperty)
    .UpdateTarget();

При этом у меня нет 100% уверенности, что это исправит вашу основную проблему. Раньше у меня не было такой проблемы с привязками WPF, но у меня было несколько странных проблем с элементом управления вкладкой.

person Daniel Pratt    schedule 18.03.2009
comment
Я больше склонен винить RadioButton, чем TabControl, но это только потому, что раньше у меня с ним были другие проблемы. Я попробую это для временного исправления - person ; 18.03.2009
comment
Даже если делать это при каждом изменении выбора, это, похоже, не помогает, что соответствует теории о том, что привязка полностью утеряна. - person ; 18.03.2009

Это, по-видимому, известная проблема:

http://social.msdn.microsoft.com/forums/en-US/wpf/thread/8eb8280a-19c4-4502-8260-f74633a9e2f2/

Короче говоря, RadioButton (через .Net 3.5sp1) каким-то образом убивает привязки других RadioButton, когда он проверяется при попытке снять отметку с любых других кнопок. Простое исправление (читай: взломать) - назначить каждой радиокнопке другое GroupName, и тогда они не будут пытаться связываться друг с другом.

person Community    schedule 18.03.2009

Другой способ решить эту проблему - подделать список свойств в ListBox и сделать шаблон ListBoxItem радиокнопкой.

person Donnelle    schedule 18.03.2009