关闭 PropertyChanged 事件,同时对象由 RawSQLQuery 填充



在我的XAF Winforms项目中,我使用以下方法来填充我的非持久性System.Data.Entity对象

  // using System.Data.Entity.Infrastructure.DbRawSQLQuery
  List<myentity> results = connect.Database.SqlQuery<myentity>(sql).ToList();

myentity 实现 System.ComponentModel.INotifyPropertyChanged

具有以下属性

    private string _description;
    public string Description
    {
        get => _description;
        set
        {
            if (_description == value) return;
            _description = value;
            OnPropertyChanged(); // I don't want this called when loading
        }
    }

我不希望在最初填充对象时调用 OnPropertyChanges

我怎样才能防止这种情况?即MyEntity如何"知道"描述是由初始加载而不是用户的更改设置的?

我在考虑加载时_description为空...但是,由于其他原因,它可能为空。

如果要在不调用 Description 的 setter 的情况下设置支持属性,可以直接设置_description,有效地绕过OnPropertyChanged()调用。

创建一个公共 IsLoading 属性,并在 myentity 初始值设定项中将其设置为 true然后在填充集合后将其关闭

List<myentity> results = connect.Database.SqlQuery<myentity>(sql).ToList();
for each ( var obj in results) {  obj.IsLoading = false}

修改 OnPropertyChanged 以便 PropertyChanged 在加载时不会触发。

private void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
    if (PropertyChanged == null) return;
    if (IsLoading) return;
    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}

相关内容

  • 没有找到相关文章

最新更新