カスタムコントロールに使用しているデータテンプレートのセットがあります。それはうまく機能しますが、それをデータにバインドし、セットの最小/最大に基づいて値をスケーリングできるようにしたいです。次の値コンバーターを作成しました。
public class ScaleValueConverter : IValueConverter
{
/// <summary>
/// The property to use the value of
/// </summary>
public string ValueProperty { get; set; }
/// <summary>
/// The minimum value to be scaled against. Will become 0%
/// </summary>
public int MinValue { get; set; }
/// <summary>
/// The maximum value to be scaled against. Will become 100%.
/// </summary>
public int MaxValue { get; set; }
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var type = value.GetType();
var property = type.GetProperty(ValueProperty);
if (property == null)
return 0;
var result = System.Convert.ToDecimal(property.GetValue(value, null));
//TODO: Scale stuff
return result + 100;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
目的は、汎用の値コンバーターを用意し、バインディングソースオブジェクトをXAMLの値コンバーターに提供し、それを整理することです。
ただし、テンプレート化されたコントロールから作成した値コンバーターにアクセスできないため、これを行う方法がわかりません。
私は大まかに次のように機能するものを探しています:
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
//Get Value Converters
var topScaleValueConverter = GetTemplateChild("TopScaleValueConverter");
var bottomScaleValueConverter = GetTemplateChild("BottomScaleValueConverter");
//Setup value converter Min / Max / ValueProperty here
}
理想的には、それらは私のテンプレートの一部であり、それらをパーツとして抽出できますが、それは機能していないようです。
この種の行動を機能させるための正しい方向に誰かが私を向けることができますか?
よろしく
トリスタン
編集:依存性注入ができるといいと思います。これが可能かどうか誰かが知っていますか?