我想知道您如何决定何时使用converters
以及何时使用triggers
。
我更喜欢在GUI上使用触发器来操作(比如显示/隐藏控件,改变它们的外观等)。
前段时间我使用了BooleanToVisibilityConverter
用于此目的,但现在,我只是不需要它,我使用触发器连接到visibility
所有事情,我甚至开始思考“ MS团队创建BooleanToVisibilityConverter
的目的是什么?“。通常,当我有可能尝试使用声明方式编写代码时 - 在本例中 - XAML。
您对此有何看法?
答案 0 :(得分:18)
我同意你的观点,我也尝试在XAML中使用声明性代码,而不是Triggers
而不是Converters
。
在大多数情况下,触发器可以执行与任何转换器相同的工作,但Converters
可以使用自定义/业务逻辑作为pchajer。
Triggers
的一个限制是DataTriggers
中的 Setters只能更改UI元素的属性;所以,你无法使用触发器更新你的ViewModels属性,那就是Converters
获胜的地方,请记住ConvertBack
方法。
因此,您可以使用Visibility
将VM属性与控件BooleanToVisibilityConverter
绑定,即使您的控件visibility
被其他方式更改,您的VM属性也会更新强>;
通常情况下,并不要求BooleanToVisibilityConverter
被触发器取代的原因。
所以简而言之 -
Triggers
只能执行OneWay
次操作,而Converters
可以执行TwoWay
次操作
答案 1 :(得分:2)
在我看来,你是从下往上看,你只需要自上而下。
触发器 - 当满足指定条件时,它“触发”执行
转换器 - 在两种不兼容的类型之间进行转换。
为什么我们可以在使用整数时执行相同的功能时需要布尔数据类型?
答案 2 :(得分:1)
您可以通过触发器或转换器实现该功能,但是从我的选项中可以在做出决定时考虑可能性
答案 3 :(得分:1)
除了上面所说的,我只能添加:
答案 4 :(得分:0)
您应该始终在DomainModel对象中或至少在ViewModel对象中执行与业务相关的操作。 使转换器中的某些业务工作不是一个好的选择,因为转换器旨在将值从一种类型转换为另一种类型。