记录值在WPF数据绑定中更改为属性

时间:2011-04-27 09:22:07

标签: wpf data-binding logging

我对WPF数据绑定通知有疑问

我有一个复选框,它与内部数据模型的bool propery双向绑定。我想要的是在更改属性时在UI中显示值已更改消息(假设“SomeBoolParameter从true更改为> false”)。

我在数据模型中实现了INotificationPropertyChanged接口,我知道可以通过在XAML中设置SourceUpdated来获得通知。

但是,我在SourceUpdated事件中收到的EventArgs是一个DataTransferEventArgs对象,我不知道如何从中检索数据模型属性值。

当然,我可以将记录代码放在属性设置器中......但是它是一个丑陋的解决方案。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

你为什么说这是一个丑陋的解决方案? 每次更改对象值时都会调用setter。如果您想遵循适当的MVVM架构,那么唯一(也是干净的)方法就是在setter中

答案 1 :(得分:0)

据我所知,DataTransferEventArgs同时具有Property和Source。难道你不能简单地做这样的事吗?

DependencyObject source = args.Source as DependencyObject;
if(source != null)
   DoSomething(source.GetValue(args.Property));

答案 2 :(得分:0)

将您的日志代码放在Setter上并不难看。您的setter / getter应该通过某种机制生成,LInq2SQL,Entity Framework或其他一些flavor或ORM,这意味着您可以调整生成器以将自定义日志记录代码放在所有setter上。

如果你不使用ORM,并且你应该总是使用它,一个更有光泽的解决方案是使用拦截,虽然它会让你觉得你要求坦克杀死苍蝇。关于在Unity 2.0 here中使用拦截的文章非常好。