如http://www.lhotka.net/weblog/DataRefreshInWPF.aspx所述
WPF 控件有时不会重新绑定到新的数据上下文。特别是在使用实现Object.Equals
来查看视图模型是否在逻辑上相等的视图模型时。这里的问题是,如果它在逻辑上等于前一个,则控件不会重新绑定到新的数据上下文。这会导致控件变得柔软,它们不会绑定到新的视图模型。
DataContext
我通过首先将 设置为 a 来规避这个问题new object()
。这可以确保控件重新绑定到新的数据上下文。但是,当视图模型包含另一个实现Object.Equals
. 使用 a 绑定到该视图模型的视图DataTemplate
不会重新绑定。我该如何解决这个问题?
显然 WPF 数据绑定应该使用ReferenceEquals
而不是Equals
..
更新:我现在通过实现子 ViewModelsIEquatable<T>
而不是覆盖来解决它Object.Equals
。