Как уведомить EntityChangeSet в DomainServices Silverlight
Во-первых, мой английский слабый, надеюсь, вы понимаете! Я разрабатываю приложение Silverlight с использованием DomainServices(DomainContext Class - Namespace: 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 получит какие-либо изменения?
1 ответ
Решение
Обновление: пример кода здесь: https://dl.dropboxusercontent.com/u/8424800/StackruHasChanges.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;
}