我正在使用WPF数据绑定编写一个相当大的表单的WPF应用程序。
我注意到,当我“放开”表单元素时,它们比我想要的更长时间存活,这意味着它们会继续从视图中获取更新,从而导致应用程序显着减慢速度。为了防止这种情况,我在文档中递归并在WPF树的一部分被释放时对每个元素调用BindingOperations.ClearAllBindings()
。
现在我遇到了以下问题。如果我的视图包含数据绑定Combobox,如下所示:
<ComboBox ItemsSource="{Binding Path=SourceItems}" SelectedValue="{Binding SelectedItem}" />
可能会发生ItemsSource
绑定在SelectedValue
绑定之前被删除。因此,我的数据模型中的SelectedItem
设置为null
。那是没想到的!
我的问题是:是否有一种安全的方法来清除没有这种副作用的表格的所有数据绑定?
答案 0 :(得分:4)
在典型的MVVM应用程序中,将视图的DataContext
设置为null
将实现您的目标,而无需通过可视化树进行昂贵且容易出错的递归。这是因为DataContext
是继承的,并且通常会针对DataContext
进行所有绑定。