是否可以“刷新”WPF 数据绑定
Posted
技术标签:
【中文标题】是否可以“刷新”WPF 数据绑定【英文标题】:Is it possible to 'refresh' WPF data bindings 【发布时间】:2010-10-13 23:33:43 【问题描述】:我有一个 xaml TabControl,在一页上,有 3 个 RadioButtons,每个 RadioButtons 绑定到相邻 ListView 的选定值上的不同属性。在 ListView 中的选定项目之间切换后,我的单选按钮似乎忘记了它们已绑定并且不刷新。
所以在调试器中观察它,当我切换到一个新的选定项时,我看到非用户代码首先检查所有 3 个属性的值,然后只检查前两个,最后只检查第一个。但是,如果我更改选项卡并更改回来,它似乎又给了我一些用途。
绑定本身相当简单。 bool 属性与 IsChecked 的双向绑定。它有 4 层深 (Path=DataModel.Selected.A.B),但我有其他相同深度的东西可以正常工作。
这是人们听说过并知道可能发生的事情吗?或者如果绑定以某种方式被遗忘,有没有办法明确提醒 xaml?
【问题讨论】:
用 Snoop 进一步研究后,我实际上可以看到绑定在几次选择更改后消失。 【参考方案1】:可以像这样手动更新绑定:
TestCheckBox
.GetBindingExpression(CheckBox.IsCheckedProperty)
.UpdateTarget();
话虽如此,我不能 100% 相信这会纠正您的根本问题。我之前在使用 WPF 绑定时没有遇到过此类问题,但我在选项卡控件方面遇到了一些奇怪问题。
【讨论】:
我更倾向于责怪 RadioButton 而不是 TabControl,但这只是因为我之前遇到过其他问题。不过我会尝试这个临时修复 即使在每次选择更改时都这样做,它似乎也无济于事,这与绑定完全丢失的理论相吻合【参考方案2】:这显然是一个已知问题:
http://social.msdn.microsoft.com/forums/en-US/wpf/thread/8eb8280a-19c4-4502-8260-f74633a9e2f2/
简而言之,当一个 RadioButton(通过 .Net 3.5sp1)在尝试取消选中任何其他按钮时被选中时,它会以某种方式杀死其他 RadioButton 的绑定。简单的解决方法(阅读:hack)是为每个单选按钮分配一个不同的 GroupName,然后他们不会试图互相混淆
【讨论】:
【参考方案3】:解决此问题的另一种方法是伪造 ListBox 中的属性列表,并将 ListBoxItem 模板设置为单选按钮。
【讨论】:
以上是关于是否可以“刷新”WPF 数据绑定的主要内容,如果未能解决你的问题,请参考以下文章