В вашем случае, подойдёт создание специального кастомного конвертера, который сделает и из числа в строку, и потом строку обработает.
Другой вариант - MultiBinding. Создаётся специальный мультиконвертер, в который указывается несколько обычных биндингов. Но они обрабатываются параллельно, поэтому, если нужно вначале делать первый конвертер, а потом использовать его результат в другом конвертере, то так не получится, все данные обрабатываются в мультиконвертере.
Но мультибиндинг работает в WPF, а в Silverlight нет. Но для Silverlight есть workaround:
www.codeproject.com/Articles/286171/MultiBinding-i...
Вот пример мультиконвертера, который берёт несколько bool, и проверяет, все ли они истинны (или ложны - можно выбрать).
Использование конвертера:
xmlns:converters="clr-namespace:MyProject.Converters"
<CheckBox x:Name="Checkbox1" Content="Чекбокс 1"/>
<CheckBox x:Name="Checkbox2" Content="Чекбокс 2"/>
<ToggleButton Content="Кнопка">
<ToggleButton.IsEnabled>
<MultiBinding Converter="{converters:BooleanMultiConverter Type=AllTrue}">
<Binding Path="IsChecked" ElementName="Checkbox1"/>
<Binding Path="IsChecked" ElementName="Checkbox2"/>
</MultiBinding>
</ToggleButton.IsEnabled>
</ToggleButton>
Сам конвертер:
using System;
using System.Linq;
using System.Windows;
using System.Windows.Data;
using System.Windows.Markup;
namespace MyProject.Converters
{
public class BooleanMultiConverter : MarkupExtension, IMultiValueConverter
{
/// <summary>
/// Перечисление типа конвертера
/// </summary>
public enum Types
{
AllTrue,
AllFalse,
AnyTrue,
AnyFalse,
}
/// <summary>
/// Тип конвертера, по умолчанию - AllTrue
/// </summary>
public Types Type { get; set; }
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
switch (Type)
{
case Types.AllTrue:
return values.All(v => (bool)v);
case Types.AllFalse:
return values.All(v => !(bool)v);
case Types.AnyTrue:
return values.Any(v => (bool)v);
case Types.AnyFalse:
return values.Any(v => !(bool)v);
default:
throw new InvalidOperationException();
}
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
return new[] { DependencyProperty.UnsetValue };
}
#region MarkupExtension
public BooleanMultiConverter()
{
}
/// <summary>
/// Отображать конвертер в списке
/// </summary>
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
#endregion
}
}
MarkupExtension используется, чтобы не создавать кучу конвертеров в ресурсах