有没有办法在XAML中链接多个值转换器?
我有一个情况,我需要显示一个整数值,绑定到我的数据上下文属性,通过两个单独的转换后:
- 反转范围内的值(例如范围是1到100; datacontext中的值是90;用户看到值10)
- 将数字转换为string
我意识到我可以通过创build我自己的转换器(实现IValueConverter)来完成这两个步骤。 不过,我已经有一个单独的值转换器,只是第一步,第二步是由Int32Converter覆盖。
有没有办法可以链接这两个现有的类在XAML中,而不必创build一个进一步的聚合它们的类?
如果我需要澄清这一点,请让我知道。 🙂
谢谢。
我在我的Silverlight项目中使用了Gareth Evans的这个方法 。
这是我的实现:
public class ValueConverterGroup : List<IValueConverter>, IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return this.Aggregate(value, (current, converter) => converter.Convert(current, targetType, parameter, culture)); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } #endregion }
然后可以像这样使用XAML:
<c:ValueConverterGroup x:Key="InvertAndVisibilitate"> <c:BooleanInverterConverter/> <c:BooleanToVisibilityConverter/> </c:ValueConverterGroup>
find我正在寻找什么,乔希·史密斯: pipe道价值转换器 (archive.org链接) 。
他定义了一个ValueConverterGroup
类,它在XAML中的使用正如我所期待的那样。 这是一个例子:
<!-- Converts the Status attribute text to a SolidColorBrush used to draw the output of statusDisplayNameGroup. --> <local:ValueConverterGroup x:Key="statusForegroundGroup"> <local:IntegerStringToProcessingStateConverter /> <local:ProcessingStateToColorConverter /> <local:ColorToSolidColorBrushConverter /> </local:ValueConverterGroup>
好东西。 谢谢,乔希。 🙂
是的,有办法链接转换器,但它看起来不漂亮,你不需要在这里。 如果你需要这个,问问你自己是否真的要走? 即使你必须编写自己的转换器,简单总是更好的工作。
在您的具体情况下,您只需将转换后的值格式化为string即可。 Binding
上的StringFormat
属性就是你的朋友。
<TextBlock Text="{Binding Value,Converter={StaticResource myConverter},StringFormat=D}" />