在我的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));
}