Перехват с Unity в Prism v2 для WPF (у меня не работает) - PullRequest
0 голосов
/ 27 марта 2010

Мне не удается перехватить работу с Prism v2 (октябрь 2009 г.). Я пытаюсь перехватить Setter для любых открытых свойств и затем запустить событие PropertyChanged, если свойство изменилось. Я вижу, что код выполняется (пошагово с помощью отладчика или добавления точки отладки). Однако элементы управления WPF Window, связанные с этими свойствами, не обновляются. Если я подписываюсь на эти события и печатаю на консоли, я могу распечатать уведомления об изменении свойства.

Таким образом, если представление имеет текстовое поле, в котором обновляется свойство в модели представления, тогда свойство в модели просмотра обновляется. Однако если кнопка в представлении (реализованном как DelegateCommand) вызывает обновление свойства, то текстовое поле (режим двухстороннего связывания), которое привязано к этому свойству, не обновляется, даже если событие инициировано и консоль распечатала информация о том, какое свойство было обновлено. Кто-нибудь сталкивался с этой проблемой?

Вот пример приложения WPF , которое я написал. Wordpress не позволяет загружать zip-файлы, поэтому я переименовал его в расширение pdf (переименуйте файл в расширение zip). Пожалуйста, дайте мне знать, что я делаю неправильно. Заранее спасибо.

1 Ответ

0 голосов
/ 29 марта 2010

Кажется, проблема существует с TransparentProxyInterceptor. Программа работает, если я изменю его с TransparentProxyInterceptor на виртуальные свойства и объявлю VirtualMethodInterceptor, т.е. с

        _container.RegisterType<SampleViewModel>()
            .Configure<Interception>()
            .SetDefaultInterceptorFor<SampleViewModel>(new TransparentProxyInterceptor())
            .AddPolicy("NotifyPropertyChanged")
            .AddMatchingRule(new PropertyMatchingRule("*", PropertyMatchingOption.Set))
            .AddCallHandler(typeof(NotifyPropertyChangedCallHandler));

до

        _container.RegisterType<SampleViewModel>()
            .Configure<Interception>()
            .SetDefaultInterceptorFor<SampleViewModel>(new VirtualMethodInterceptor())
            .AddPolicy("NotifyPropertyChanged")
            .AddMatchingRule(new PropertyMatchingRule("*", PropertyMatchingOption.Set))
            .AddCallHandler(typeof(NotifyPropertyChangedCallHandler));

Не знаю почему. Есть идеи?

...