Другой способ - заставить ваш конвертер наследовать от DependencyObject (или FrameworkElement). Это позволяет вам объявлять свойства зависимостей, позволяя устанавливать его значения из XAML, даже Binding.
Пример: преобразователь для умножения значения, определяющего коэффициент, который получается из свойства (FactorValue) в пользовательском элементе управления (MyControl).
Конвертер:
public class MyConverter : DependencyObject, IValueConverter
{
// The property used as a parameter
public double Factor
{
get { return (double) GetValue(FactorProperty); }
set { SetValue(FactorProperty, value); }
}
// The dependency property to allow the property to be used from XAML.
public static readonly DependencyProperty FactorProperty =
DependencyProperty.Register(
"Factor",
typeof(double),
typeof(MyConverter),
new PropertyMetadata(1.15d));
#region IValueConverter Members
object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
// Use the property in the Convert method instead of "parameter"
return (double) value * Factor;
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
Использование в XAML:
<MyConverter x:Key="MyConv"
Factor={Binding ElementName=MyControl, Path=FactorValue}
/>
Итак, теперь вы можете объявить свойство зависимости для каждого параметра, которое вам нужно в конвертере, и связать его.