Поднять PropertyChanged на пользовательских свойствах в EntityObject - PullRequest
2 голосов
/ 11 ноября 2010

У меня есть несколько пользовательских вычисляемых свойств для EntityObject.Я хотел бы запустить событие PropertyChanged, чтобы уведомить все привязки.Это не работает, однако, и это вызывает исключение аргумента, когда я использую ReportPropertyChanged:

De eigenschap ИмяВажная информация: Entity Framework для получения более подробной информации.

Это означает, что Name не является свойством сущности, и я должен посмотреть в документации Entity Framework дополнительную информациюЕсть ли способ вызвать событие и заставить Entity Framework его игнорировать?

Пример кода:

partial class Preset
{
    public string Name
    {
        get
        {
            if (this.SystemPreset)
                return Translate("preset_" + this.Name_Original + "_name");
            else
                return this.Name_Original;
        }
        set
        {
            if (!value != this.Name_Internal)
            {
                this.Name_Internal = value;
                ReportPropertyChanged(Name);
            }
        }
    }
}

Свойство Name является настраиваемым свойством.Инфраструктура сущностей вызовет исключение, когда я попытаюсь запустить PropertyChanged через метод ReportPropertyChanged в EntityObject.

Ответы [ 2 ]

4 голосов
/ 29 декабря 2010

Вы сможете просто позвонить OnPropertyChanged("YourPropertyName") ( msdn ) из установщика пользовательских свойств, и WPF подберет его.

Это работает для меня в Visual Studio 2010, в .NET 4.0, когда я общаюсь с базой данных SQLServer CE (я думаю, что это структура сущностей 4, но я не уверен).

1 голос
/ 11 ноября 2010

ReportPropertyChanged не для вашего использования, EF должен уведомить ObjectStateManager , чтобы изменить CurrentValues ​​ для этого объекта, чтобы он мог отслеживать измененияи генерировать соответствующие команды SQL на более позднем этапе, когда мы вызываем SaveChanges on ObjectContext .

Тем не менее, каждое скалярное свойство каждой сущности имеет свою собственную версию 2-х частичных методов, которые вы можете реализовать: В [свойстве] Изменено и На [Свойства] Изменение .
Реализация по умолчанию для PropertyChanging и PropertyChanged отсутствует;только декларация.Это дает вам возможность выполнять пользовательскую логику, когда свойство собирается измениться (PropertyChanging), а также сразу после изменения значения свойства (PropertyChanged), и вы можете использовать их для обновления значения ваших пользовательских вычисляемых свойств.

...