4 using System.Globalization;
5 using System.Windows.Data;
6 using System.Windows.Markup;
8 namespace SiliconStudio.Presentation.ValueConverters
21 public const int MaxConverterCount = 8;
27 : this(null, null, null, null, null, null, null, null)
36 : this(converter, null, null, null, null, null, null, null)
46 : this(converter1, converter2, null, null, null, null, null, null)
57 : this(converter1, converter2, converter3, null, null, null, null, null)
69 : this(converter1, converter2, converter3, converter4, null, null, null, null)
83 : this(converter1, converter2, converter3, converter4, converter5, null, null, null)
98 : this(converter1, converter2, converter3, converter4, converter5, converter6, null, null)
114 : this(converter1, converter2, converter3, converter4, converter5, converter6, converter7, null)
132 Converter1 = converter1;
133 Converter2 = converter2;
134 Converter3 = converter3;
135 Converter4 = converter4;
136 Converter5 = converter5;
137 Converter6 = converter6;
138 Converter7 = converter7;
139 Converter8 = converter8;
145 public IValueConverter Converter1 {
get {
return converters[0]; } set { converters[0] = value; } }
149 public IValueConverter Converter2 {
get {
return converters[1]; } set { converters[1] = value; } }
153 public IValueConverter Converter3 {
get {
return converters[2]; } set { converters[2] = value; } }
157 public IValueConverter Converter4 {
get {
return converters[3]; } set { converters[3] = value; } }
161 public IValueConverter Converter5 {
get {
return converters[4]; } set { converters[4] = value; } }
165 public IValueConverter Converter6 {
get {
return converters[5]; } set { converters[5] = value; } }
169 public IValueConverter Converter7 {
get {
return converters[6]; } set { converters[6] = value; } }
173 public IValueConverter Converter8 {
get {
return converters[7]; } set { converters[7] = value; } }
178 public object Parameter1 {
get {
return converterParameters[0]; } set { converterParameters[0] = value; } }
182 public object Parameter2 {
get {
return converterParameters[1]; } set { converterParameters[1] = value; } }
186 public object Parameter3 {
get {
return converterParameters[2]; } set { converterParameters[2] = value; } }
190 public object Parameter4 {
get {
return converterParameters[3]; } set { converterParameters[3] = value; } }
194 public object Parameter5 {
get {
return converterParameters[4]; } set { converterParameters[4] = value; } }
198 public object Parameter6 {
get {
return converterParameters[5]; } set { converterParameters[5] = value; } }
202 public object Parameter7 {
get {
return converterParameters[6]; } set { converterParameters[6] = value; } }
206 public object Parameter8 {
get {
return converterParameters[7]; } set { converterParameters[7] = value; } }
211 public Type TargetType1 {
get {
return converterTargetType[0]; } set { converterTargetType[0] = value; } }
215 public Type TargetType2 {
get {
return converterTargetType[1]; } set { converterTargetType[1] = value; } }
219 public Type TargetType3 {
get {
return converterTargetType[2]; } set { converterTargetType[2] = value; } }
223 public Type TargetType4 {
get {
return converterTargetType[3]; } set { converterTargetType[3] = value; } }
227 public Type TargetType5 {
get {
return converterTargetType[4]; } set { converterTargetType[4] = value; } }
231 public Type TargetType6 {
get {
return converterTargetType[5]; } set { converterTargetType[5] = value; } }
235 public Type TargetType7 {
get {
return converterTargetType[6]; } set { converterTargetType[6] = value; } }
239 public Type TargetType8 {
get {
return converterTargetType[7]; } set { converterTargetType[7] = value; } }
242 private readonly
object[] converterParameters =
new object[MaxConverterCount];
243 private readonly Type[] converterTargetType =
new Type[MaxConverterCount];
252 public object Convert(
object value, Type targetType,
object parameter, CultureInfo culture)
254 object output = value;
255 bool conversionEnded =
false;
257 for (
int i = 0; i < MaxConverterCount; ++i)
259 object input = output;
260 if (converters[i] == null)
262 conversionEnded =
true;
267 throw new InvalidOperationException(
string.Format(
"Converter{0} is not null but previous Converter{1} was null", i, i - 1));
269 output = converters[i].Convert(input, converterTargetType[i] ?? typeof(
object), converterParameters[i], culture);
275 public object ConvertBack(
object value, Type targetType,
object parameter, CultureInfo culture)
277 object output = value;
279 bool conversionStarted =
false;
281 for (
int i = MaxConverterCount - 1; i >= 0; --i)
283 object input = output;
284 if (converters[i] == null)
286 if (!conversionStarted)
288 throw new InvalidOperationException(
string.Format(
"Converter{0} is null but following Converter{1} is not null", i, i + 1));
291 conversionStarted =
true;
293 output = converters[i].Convert(input, converterTargetType[i] ?? typeof(
object), converterParameters[i], culture);
Chained(IValueConverter converter1, IValueConverter converter2, IValueConverter converter3, IValueConverter converter4, IValueConverter converter5, IValueConverter converter6)
Initializes a new instance of the Chained class with the given instances of IValueConverter.
Chained(IValueConverter converter1, IValueConverter converter2, IValueConverter converter3, IValueConverter converter4)
Initializes a new instance of the Chained class with the given instances of IValueConverter.
object Convert(object value, Type targetType, object parameter, CultureInfo culture)
Chained(IValueConverter converter1, IValueConverter converter2, IValueConverter converter3, IValueConverter converter4, IValueConverter converter5, IValueConverter converter6, IValueConverter converter7, IValueConverter converter8)
Initializes a new instance of the Chained class with the given instances of IValueConverter.
Chained(IValueConverter converter1, IValueConverter converter2, IValueConverter converter3, IValueConverter converter4, IValueConverter converter5, IValueConverter converter6, IValueConverter converter7)
Initializes a new instance of the Chained class with the given instances of IValueConverter.
Chained(IValueConverter converter1, IValueConverter converter2, IValueConverter converter3)
Initializes a new instance of the Chained class with the given instances of IValueConverter.
Chained(IValueConverter converter1, IValueConverter converter2, IValueConverter converter3, IValueConverter converter4, IValueConverter converter5)
Initializes a new instance of the Chained class with the given instances of IValueConverter.
override object ProvideValue(IServiceProvider serviceProvider)
Chained(IValueConverter converter1, IValueConverter converter2)
Initializes a new instance of the Chained class with the given instances of IValueConverter.
Chained(IValueConverter converter)
Initializes a new instance of the Chained class with the given instances of IValueConverter.
object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
Chained()
Initializes a new instance of the Chained class.
This converter can chain up to MaxConverterCount IValueConverter to convert a value. The first converter takes the value parameter of the Chained value converter itself, and then each converter takes the previous converter output as input value. The parameter and target type of each converter can also be specified. IValueConverter.ConvertBack is supported and converters are invoked backward.