Можно попробовать использовать событие PropertyChanged для базового объекта Foo
, чтобы инициировать передачу RaisePropertyChanged для свойств FooViewModel
.
, поэтому сделайте некоторые предположения (поэтому этот код имеет смысл):
У вас есть личные переменные в вашем FooViewModel
private Foo _foo;
private DomainContext _context;
У вас есть метод наваш FooViewModel
, который вызывает RejectChanges()
в контексте вашего домена.
Примерно так:
public void RejectChanges()
{
_context.RejectChanges();
}
- У нас есть метод, который вызывает событие PropertyChanged для нашего
FooViewModel
Вот так:
private void RaisePropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if(handler != null)
handler(this, new PropertyChangedEventArgs(propertyName);
}
Хорошо, теперь мы установили это, давайте посмотрим, что именно происходит, когда вы звоните RejectChanges()
в контексте домена.
Когда вы звоните RejectChanges()
это пузыри вниз через DomainContext
до EntityContainer
, затем до каждого EntitySet
в этом контейнере и затем до каждого Entity
в наборе.
Когда-то там (и в EntitySet
), он применяет исходные значения, если они были, удаляет объект, если он был добавлен, или добавляет его, если он был удален.Если в значения были внесены изменения, то он применяет их обратно к свойствам.
Таким образом, теоретически все RaisePropertyChanged (), которые генерируются в свойствах сущности, должны запускаться.
ПРИМЕЧАНИЕ: я на самом деле не проверял это.Если это не так, то ничего из этого не работает: P
Таким образом, мы можем подключиться к событию PropertyChanged объекта Foo
и вызвать событие PropertyChanged
в нашем FooViewModel
.
чтобы наш метод RejectChanges()
мог выглядеть так:
public void RejectChanges()
{
Func<object, PropertyChangedEventArgs> handler = (sender, e) =>
{
RaisePropertyChanged(e.PropertyName);
};
_foo.PropertyChanged += handler;
_context.RejectChanges();
_foo.PropertyChanged -= handler;
}
Итак, мы подключаем обработчик событий к нашей сущности Foo
, которая вызывает метод FooViewModel.RaisePropertyChanged
с помощьюимя свойства, которое изменяется в сущности Foo
.
Затем мы отклоняем изменения (что вызывает изменения свойства),
, затем мы отцепляем обработчик событий.
Довольнодолго наматывается, но надеюсь это поможет :) 1072 *