当前位置: 首页 > 编程语言 > C#

改进的IValueConverter——MarkupExtension还是DependencyObject?

时间:2023-04-10 19:07:49 C#

改进的IValueConverter-MarkupExtension或DependencyObject?我在网上看到了两种不同的方式来增强IValueConverter。其中一个从MarkupExtension扩展ValueConverter,另一个从DependencyObject扩展。我不能同时扩展两者,所以我想知道一个是否比另一个更好?从每个派生给你不同的权力和灵活性:@crazyarabian评论:你的声明“从DependencyObject派生使你能够以更具表现力的方式配置具有某些偏好的值转换器”不仅仅是DependencyObject单独存在,因为你可以创建相同的MaxLength属性onMarkupExtension,导致。我觉得MarkupExtension的表现力更强,也更简洁。那是真的。但这没有约束力;也就是说,当您从MarkupExtension派生时,您不能这样做:MaxLength="{BindingTextLength}"但是,如果您从DependencyObject派生转换器,则可以执行上述操作。从这个意义上说,它比MarkupExtension更具表现力。请注意,目标属性必须是DependencyProperty才能使Binding起作用。MSDN说,因为它是我的库,所以你引用了一个扩展DependencyObject的转换器的例子,我认为这适合解释我自己。我实际上是从简单地实现IValueConverter和Object作为我的基类开始的。我转向扩展DependencyObject的唯一原因是允许一种技术——由JoshSmith开创——称为虚拟分支。您可以在此处阅读有关此技术的信息。假设您想做这样的事情:这不会起作用,因为资源不是可视化树的一部分,所以绑定会失败。虚拟分支解决了这个小难题,允许您执行这样的绑定。但是,与任何其他WPF绑定一样,它仍然依赖于作为DependencyObject的目标。因此,如果我只是在不扩展DependencyObject的情况下实现IValueConverter,它会阻止使用虚拟分支。现在,如果我完全诚实的话,我不确定如果再有时间我是否还会这样做。我自己从未真正使用过虚拟分支——我只是想启用这种情况。我什至可能会在我的库的未来版本中更改它。所以我的建议是坚持使用Object的基类(或其简单的派生类),除非你真的认为你需要虚拟分支。以上就是C#学习教程:ImprovedIValueConverter-MarkupExtensionorDependencyObject?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: