Я пытаюсь реализовать WPF ViewModel, используя Castle Windsor Dynamic Proxies. Идея заключается в том, что я хочу предоставить интерфейс (ниже приведен IPerson), конкретный класс поддержки и перехватчик (для обеспечения автоматической реализации INotifyPropertyChanged). Реализация перехватчика здесь: http://www.hightech.ir/SeeSharp/Best-Implementation-Of-INotifyPropertyChange-Ever
Проблема, с которой я сталкиваюсь, заключается в том, что когда я связываю свои модели с элементами управления WPF, элементы управления не видят модели как реализующие INotifyPropertyChanged. Я полагаю (но не уверен), что это потому, что Виндзор явно реализует интерфейсы, и WPF, похоже, ожидает, что они будут неявными.
Есть ли способ заставить эту работу так, чтобы изменения в модели были перехвачены перехватчиком и переданы в модель?
Все версии библиотек являются самыми последними: Castle.Core 2.5.1.0 и Windsor 2.5.1.0
Код выглядит следующим образом:
// My model's interface
public interface IPerson : INotifyPropertyChanged
{
string First { get; set; }
string LastName { get; set; }
DateTime Birthdate { get; set; }
}
// My concrete class:
[Interceptor(typeof(NotifyPropertyChangedInterceptor))]
class Person : IPerson
{
public event PropertyChangedEventHandler PropertyChanged = (s,e)=> { };
public string First { get; set; }
public string LastName { get; set; }
public DateTime Birthdate { get; set; }
}
// My windsor installer
public class Installer : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Component.For<NotifyPropertyChangedInterceptor>()
.ImplementedBy<NotifyPropertyChangedInterceptor>()
.LifeStyle.Transient);
container.Register(
Component.For<IPerson, INotifyPropertyChanged>()
.ImplementedBy<Person>().LifeStyle.Transient);
}
}