我試圖編寫一個具有三個相關屬性的控件:value,minimum和maximum。價值變化,但最小值和最大值是固定的。帶多個參數的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,這看起來是錯誤的。
除非您使用雙向綁定,否則不需要實現convertback。對於該轉換器的每次調用,最小/最大值總是相同的? – ndonohoe 2014-11-24 14:07:37
我想知道爲什麼你需要一個ConvertBack方法? 假設我有一個號碼,例如10.0。從只看到數字是不可能猜測這個數字在裏面的範圍的最小值和最大值(但這是你的ConvertBack方法必須做的)。 – pgenfer 2014-11-24 14:09:58
只需使用'ConverterParameter'來傳入你的兩個缺失值。 – Sheridan 2014-11-24 14:22:14