有没有办法在XAML中链接多个值转换器?

我有一个情况,我需要显示一个整数值,绑定到我的数据上下文属性,通过两个单独的转换后:

  1. 反转范围内的值(例如范围是1到100; datacontext中的值是90;用户看到值10)
  2. 将数字转换为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}" />