我有一个类似的问题。我绑定到 TreeView 并且需要调用 Refresh 以响应用户取消编辑操作。该Refresh()
方法乖乖地将所有原始值放回原处,但这并没有反映在我的TreeView UI中。在咨询了全能的谷歌之后,我遇到了这个解决方案:
CollectionViewSource.GetDefaultView(treeViewClusters.ItemsSource).Refresh();
这似乎迫使我的 TreeView 更新所有内容。唯一的缺点(这是一个非常大的缺点)是它似乎折叠了所有的树节点,这导致用户失去了他们的位置。我也可以将 my 设置ItemsSource
为 null 并再次返回...效果相同,尽管如果您有一堆绑定的文本框或其他东西,这种方法会更简单,因为您不需要重新绑定每个文本框。
还有比这更好的解决方案吗?
编辑:是的,有...
我的一个比我聪明的同事想出了这个解决方案,这似乎可以解决问题。在 Linq2Sql 对象的分部类中,添加以下代码:
public void SendPropertiesChanged()
{
foreach (System.Reflection.PropertyInfo prop in this.GetType().GetProperties())
SendPropertyChanged(prop.Name);
}
您可以在应用程序代码中调用它:
context.Refresh(RefreshMode.OverwriteCurrentValues, employee);
employee.SendPropertiesChanged();
所有 UI 元素都会收到消息,并适当地更新自己。这甚至适用于树视图控件以及您不希望 UI 在刷新绑定时出现“重置”的情况。