0

我无法使用 Prism v2(2009 年 10 月)进行拦截。我试图拦截任何公共属性的 Setter,然后在属性发生更改时触发 PropertyChanged 事件。我可以看到代码被执行(通过调试器单步执行或添加调试点)。但是,绑定到这些属性的 WPF 窗口控件不会得到更新。如果我订阅这些事件并打印到控制台,我可以打印出属性更改通知。

因此,如果 View 有一个文本框,它会更新 ViewModel 上的属性,那么 ViewModel 中的属性就会更新。但是,如果视图上的按钮(作为 DelegateCommand 实现)导致属性更新,则绑定到该属性的文本框(双向绑定模式)不会更新,即使触发了事件并且控制台已打印出有关更新了哪个属性的信息。有没有人遇到过这个问题?

这是我编写的示例 WPF 应用程序。Wordpress 不允许上传 zip 文件,因此我将其重命名为 pdf 扩展名(将文件重命名为 zip 扩展名)。请让我知道我做错了什么。提前致谢。

4

1 回答 1

0

似乎透明代理拦截器存在问题。如果我将其从 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));

我不知道为什么。任何的想法?

于 2010-03-28T23:31:14.803 回答