Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 停止项控制缓存_C#_Wpf_Caching_Itemscontrol - Fatal编程技术网

C# 停止项控制缓存

C# 停止项控制缓存,c#,wpf,caching,itemscontrol,C#,Wpf,Caching,Itemscontrol,因此,我的ViewModel中有一个ObservableCollection用户User有一个名为Username的属性,如果两个用户的Username相等,则这两个用户相等(使用IEquality) 因此,在我的代码中的某个地方,我正在这样做:this.Configuration.Users[0]=user其中user是我编辑后得到的另一个用户 现在发生的事情是,如果两个用户都相等(就像他们的用户名相等一样),UI不会更新,这不是我所期望的。对新用户的任何更改都不会反映在UI中 我认为只有当默

因此,我的ViewModel中有一个
ObservableCollection用户
User
有一个名为
Username
的属性,如果两个用户的
Username
相等,则这两个用户相等(使用
IEquality

因此,在我的代码中的某个地方,我正在这样做:
this.Configuration.Users[0]=user
其中
user
是我编辑后得到的另一个用户

现在发生的事情是,如果两个用户都
相等
(就像他们的用户名相等一样),UI不会更新,这不是我所期望的。对新用户的任何更改都不会反映在UI中

我认为只有当默认相等比较器检测到更改时,UI才会更新。我不要这个。无论何时,只要用户以任何方式发生更改,我都希望用户界面得到更新

有没有办法做到这一点

编辑:到目前为止,我有以下解决方法:

this.Configuration.Users.RemoveAt(index);
this.Configuration.Users.Insert(index, user);

用户
类是否实现INotifyPropertyChanged?您正在观看什么事件?我无法通过添加一个int并用相同的int替换它来复制该行为(它触发了
CollectionChanged
事件),是的<代码>用户名不会触发Propertychanged事件。但是另一个属性(例如
State
)是一个枚举,它确实实现了属性更改。在使用ObservableCollection的索引器后,对该枚举的任何更改都不会反映在UI中。@Rob我认为这是因为IEquality,它们都是“相等”的,所以UI可能没有注意到。如果我更改用户名,用户界面会相应更新。您的要求有冲突。当两个用户实例被视为相等时,当一个被另一个替换时,您不能期望ObservableCollection引发CollectionChanged事件。可以更改相等条件,也可以更新现有对象上所有已更改的特性。或者您可以编写自己的特殊ObservableCollection,它使用
object.ReferenceEquals
来确定对象相等性。