Как уведомить EntityChangeSet в DomainServices Silverlight

Во-первых, мой английский слаб, надеюсь, вы меня понимаете! Я разрабатываю приложение Silverlight, используя DomainServices (класс DomainContext — пространство имен: System.ServiceModel.DomainServices.Client) для извлечения и обновления данных. У меня есть некоторые свойства:

DomainContextVBHS _Service = new DomainContextVBHS();


public int AddedEntitiesCount
{
    get{ return _Service.EntityContainer.GetChanges().AddedEntities.Count; }
}

public int ModifiedEntitiesCount
{
    get{ return _Service.EntityContainer.GetChanges().ModifiedEntities.Count; }
}
public int RemovedEntitiesCount
{
    get{ return _Service.EntityContainer.GetChanges().RemovedEntities.Count; }
}

Как я могу уведомить их в пользовательском интерфейсе, когда _Service получит какие-либо изменения?


person MasterLuV    schedule 04.09.2014    source источник
comment
Вы ищете RaisePropertyChanged? О, и твой английский совсем не плох. :)   -  person Chris W.    schedule 04.09.2014
comment
Можете ли вы привести пример? (я пытаюсь найти событие для вызова RaisePropertyChanged, но ничего не нашел), и мой проект чистый 4.0   -  person MasterLuV    schedule 05.09.2014


Ответы (1)


Обновление: пример кода здесь: https://dl.dropboxusercontent.com/u/8424800/StackOverflowHasChanges.zip

Я быстро просмотрел исходный код с помощью декомпилятора. Официального способа нет. К счастью, если вы хотите прослушивать все события изменения свойств во всех наборах внутренних сущностей, вы сможете достичь того, что вам нужно.

Образец открытого класса: INotifyPropertyChanged {

    SampleDomainContext _Service = new SampleDomainContext();

    public Sample()
    {
        _Service.Load(_Service.GetCustomersQuery());

        _Service.Customers.PropertyChanged += PropChanged;
        //_Service.Orders.PropertyChanged += PropChanged;
        // etc.
    }

    public int AddedEntitiesCount
    {
        get { return _Service.EntityContainer.GetChanges().AddedEntities.Count; }
    }

    public int ModifiedEntitiesCount
    {
        get { return _Service.EntityContainer.GetChanges().ModifiedEntities.Count; }
    }
    public int RemovedEntitiesCount
    {
        get { return _Service.EntityContainer.GetChanges().RemovedEntities.Count; }
    }

    public void PropChanged(object sender, PropertyChangedEventArgs e)
    {
        var pc = this.PropertyChanged;
        if (pc != null)
        {
            pc(this, new PropertyChangedEventArgs("AddedEntitiesCount"));
            pc(this, new PropertyChangedEventArgs("ModifiedEntitiesCount"));
            pc(this, new PropertyChangedEventArgs("RemovedEntitiesCount"));
            // etc
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;


}
person Chui Tey    schedule 06.09.2014
comment
Я думаю об этом (но это долго). Потому что я видел в DomainContext свойство HasChanges. HasChanges прослушивает все изменения в DomainContext, поэтому я хочу, чтобы моя собственность (например, AddEntitiesCount ..v.v..) могла делать то же самое. у тебя есть идеи? - person MasterLuV; 06.09.2014
comment
К сожалению, вы не можете прослушивать DomainContext.HasChanges. Если вы запустите .NET Reflector на сборке, вы обнаружите, что HasChanges срабатывает только один раз, а не при последующих изменениях. - person Chui Tey; 06.09.2014
comment
Я знаю, что HasChanges срабатывает только один раз, я имею в виду, что мое свойство может слушать, как HasChanges. Любые изменения в DomainContext, HasChanges могут меняться с false на true, когда я вношу изменения в любой домен, например вставляю, удаляю объект или редактирую любой объект в этом - person MasterLuV; 06.09.2014
comment
Если вы прослушиваете EntitySet‹T›.HasChanges, он будет срабатывать каждый раз при изменении свойства, добавлении или удалении объекта. - person Chui Tey; 07.09.2014
comment
Но HasChanges сработает только 1 раз. Я пытаюсь подсчитать изменения. Например, я изменил 3 записи, ModifiedEntitiesCount равен 3, но HasChanges срабатывает только один раз при первом изменении. - person MasterLuV; 07.09.2014
comment
Пример кода здесь: dl.dropboxusercontent.com/u/8424800/StackOverflowHasChanges.zip - person Chui Tey; 07.09.2014
comment
Я видел код из вашего проекта. Но как вы слушаете ModifiedEntities? Я могу сделать это, добавив событие PropertyChanged к каждой сущности внутри. Но мои данные составляют около 20 000 записей. ‹ я не хочу зацикливать 20 000, чтобы добавить событие PropertyChanged. - person MasterLuV; 07.09.2014