Я пытаюсь написать элемент управления, который имеет три связанных свойства: значение, минимальное и максимальное. Изменение значения, но минимальное и максимальное фиксированы.ValueConverter с несколькими аргументами
Так что я написал IMultiValueConverter:
public class AngleMultiConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double value = (double)values[0];
double minimum = (double)values[1];
double maximum = (double)values[2];
double angle = -150.0 + ((value - minimum) * 300.0/(maximum - minimum));
return angle;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Часть XAML выглядит следующим образом (это пользовательский элемент управления, следовательно, RelativeSource материал):
<RotateTransform.Angle>
<MultiBinding Converter="{StaticResource angleMultiConverter}">
<Binding Path="Value" RelativeSource="{RelativeSource AncestorType={x:Type local:KnobControl}}"/>
<Binding Path="MinimumValue" RelativeSource="{RelativeSource AncestorType={x:Type local:KnobControl}}" Mode="OneWay"/>
<Binding Path="MaximumValue" RelativeSource="{RelativeSource AncestorType={x:Type local:KnobControl}}" Mode="OneWay"/>
</MultiBinding>
</RotateTransform.Angle>
Это прекрасно работает, но что о ConvertBack ? Мне нужно передать три значения ... но у меня есть только один? Остальные два являются константами, так как я знаю, что это такое?
Другим решением, которое работает, является создание зависимого свойства Angle, которое выполняет всю работу в настраиваемом элементе управления ..., но выставляет Angle, который кажется неправильным.
Вам не нужно реализовывать конвертацию, если вы не используете привязку twoway. Минимальные/максимальные значения всегда одинаковы для каждого звонка на этот конвертер? – ndonohoe
Мне интересно, зачем вам нужен метод ConvertBack? Предположим, у меня есть число, например. 10,0. Из-за того, что вы видите только номер, невозможно угадать значения min и max для диапазона, в котором этот номер находится внутри (но это будет то, что должен был бы сделать ваш метод ConvertBack). – pgenfer
Просто используйте 'КонверторПараметр', чтобы передать два ваших отсутствующих значения. – Sheridan