Xamarin Forms:从数据库刷新时不会触发 Propertychanged
Xamarin Forms: Propertychanged is not triggered when refreshing from database
我的视图模型中有一个对象,它由一个 Id 和一些其他属性组成。
我的相等性检查包含对 Id 的检查,因此我可以在刷新时识别列表中的项目。
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != GetType()) return false;
return Equals(obj as Class);
}
public bool Equals(Class other)
{
if (other == null)
{
return false;
}
return this.Id.Equals(other.Id);
}
现在,当我在只有一个项目的 detailPage 上时,我想从数据库中手动刷新该项目。
当我刷新时,Id 显然不会改变,但其余属性可以。
现在我遇到的问题是,当项目相同(基于 id)时,不会触发 Propertychanged。
Class refreshedItem = await Task.Run(() => backendConnection.GetSchedule(scheduleId, DTOType.Maxi, BackEndSettings.Default.SystemOfMeasurement));
Item = refreshedItem;
如果我将 Item 设置为介于两者之间的虚拟项目,则每次都会触发。
Class refreshedItem = await Task.Run(() => backendConnection.GetSchedule(scheduleId, DTOType.Maxi, BackEndSettings.Default.SystemOfMeasurement));
Item = new Class(Guid.Empty) { Title = "test" };
Item = refreshedItem;
查看 Github Fody Properties Overview,项目 setter 中注入的(默认)代码等同于
if (value != item)
OnPropertyChanged();
它只在不相等时触发。
Fody Properties 的文档说使用属性来控制其行为。对于你想要的,使用 DoNotCheckEqualityAttribute.
我的视图模型中有一个对象,它由一个 Id 和一些其他属性组成。 我的相等性检查包含对 Id 的检查,因此我可以在刷新时识别列表中的项目。
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != GetType()) return false;
return Equals(obj as Class);
}
public bool Equals(Class other)
{
if (other == null)
{
return false;
}
return this.Id.Equals(other.Id);
}
现在,当我在只有一个项目的 detailPage 上时,我想从数据库中手动刷新该项目。 当我刷新时,Id 显然不会改变,但其余属性可以。 现在我遇到的问题是,当项目相同(基于 id)时,不会触发 Propertychanged。
Class refreshedItem = await Task.Run(() => backendConnection.GetSchedule(scheduleId, DTOType.Maxi, BackEndSettings.Default.SystemOfMeasurement));
Item = refreshedItem;
如果我将 Item 设置为介于两者之间的虚拟项目,则每次都会触发。
Class refreshedItem = await Task.Run(() => backendConnection.GetSchedule(scheduleId, DTOType.Maxi, BackEndSettings.Default.SystemOfMeasurement));
Item = new Class(Guid.Empty) { Title = "test" };
Item = refreshedItem;
查看 Github Fody Properties Overview,项目 setter 中注入的(默认)代码等同于
if (value != item)
OnPropertyChanged();
它只在不相等时触发。
Fody Properties 的文档说使用属性来控制其行为。对于你想要的,使用 DoNotCheckEqualityAttribute.