是否可以“刷新”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 数据绑定的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法刷新 WPF 中的所有绑定?

如何强制 WPF 绑定刷新?

在 WPF 中使用数据绑定时,OxyPlot 不刷新

wpf画面ListBox绑定的数据发生变化时 画面闪烁

WPF数据绑定,属性值更改UI不刷新其内容[重复]

wpf datagrid 怎么增加数据行