Замок динамический прокси и INotifyPropertyChanged в WPF

Я обертываю свои объекты прокси-сервером, используя Castle DP, мои объекты сами реализуют INotifyPropertyChanged. и вызывать событие при вызове set.

Я написал несколько модульных тестов для упаковки, чтобы увидеть, что событие propertychanged запускается, когда я управляю объектами через прокси, и все они прошли.

проблема в реальном приложении с экраном, когда я привязываю экран к свойству, которое на самом деле является DP, регистрация экрана в свойстве изменяется другим способом, и это просто не работает, если я не реализую управление регистрацией внутри код перехватчика

почему такое поведение, что делает wpf для свойства, которого я не делаю при регистрации для изменения свойства?


person Chen Kinnrot    schedule 24.08.2010    source источник
comment
Под DP вы имеете в виду динамический прокси или свойство зависимости?   -  person Dan Bryant    schedule 24.08.2010
comment
Не могли бы вы рассказать подробнее о том, что вам нужно было сделать, чтобы заставить его работать с динамическим прокси?   -  person Min    schedule 14.06.2012


Ответы (3)


При использовании Castle AOP следует помнить об одном важном моменте - метод Equals работает не так, как вы ожидаете.

Посмотрите здесь: RRSL-Lite.EntityAOP. У меня была такая же идея - иметь АОП для INPC и я создал эту библиотеку. Вот простой пример того, как его использовать.

person hellxcz    schedule 11.09.2012

Прокси-класс, созданный как прокси интерфейса, будет иметь явную реализацию интерфейса свойств, и привязка WPF не будет работать, если она явно не совпадает.

Два решения - изменить пути привязки, чтобы явно включить интерфейс:

{Binding Path=(local:IEntity.ID)} instead of just {Binding ID}

или использовать прокси виртуального метода для ваших моделей / объектов представления и сделать любые методы, которые вы перехватываете, виртуальными.

person Chris Woodward    schedule 12.01.2011
comment
Привязка в порядке .. проблема с INPC - person Chen Kinnrot; 12.01.2011

Вероятно, это связано с тем, что вы обертываете свои объекты с помощью метода Castle CreateInterfaceProxyWithTarget или аналогичного. Если вы полагаетесь на свои объекты для реализации INPC и ретранслируете свои PropertyChanged перехватчики событий на базовую цель прокси-сервера, помните, что при возникновении события PropertyChanged sender будет вашим объектом , а не ваш прокси. Если вы пытаетесь привязать свой прокси в WPF, он будет ожидать, что sender будет прокси. В противном случае изменение будет проигнорировано. Решение состоит в том, чтобы перехватить события и убедиться, что вы установили sender в качестве своего прокси.

person Jack Ukleja    schedule 18.04.2017