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.