Я столкнулся с проблемой, когда событие TargetUpdated казалось идеальным.К сожалению, похоже, что Multibinding не имеет свойства TargetUpdated.Есть ли какой-нибудь способ все еще настроить это, или мне нужно найти другое решение полностью.
Вот некоторый код, чтобы помочь
Вот привязка ...
<RotateTransform x:Name="LeftNeedle">
<RotateTransform.Angle>
<MultiBinding Converter="{StaticResource VoltageRatioConverter}" NotifyOnTargetUpdated="True" >
<Binding ElementName="root" Path="Running" />
<Binding ElementName="root" Path="Incoming" />
</MultiBinding>
</RotateTransform.Angle>
Тогда у меня есть конвертер значений ...
public class VoltageRatioConverter : IMultiValueConverter
{
#region IMultiValueConverter Members
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values == null || values.Count((x) => x != null) != 2)
return 0.0;
double running = System.Convert.ToDouble(values[0]);
double incoming = System.Convert.ToDouble(values[1]);
return ((running / incoming) - 1);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
И я хочу получить это результирующее число и передать его функции для обновления угла / анимации.
private static void OnAngleValueChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
GaugeCluster gauge = o as GaugeCluster;
if ((double)e.NewValue > 70)
{
VisualStateManager.GoToState(gauge, "RightWobble", false);
}
else if ((double)e.NewValue < -70)
{
VisualStateManager.GoToState(gauge, "LeftWobble", false);
}
else
{
if ((double)e.OldValue > 70 || (double)e.OldValue < -70)
{
VisualStateManager.GoToState(gauge, "StandingState", false);
}
}
}
^ Эта функция, которую я только что тестировал, чтобы убедиться, что она действительно работает, сделав ее обратным вызовом из одного из двух свойств зависимости.В идеале тело функции - это то, что я хочу использовать в событии TargetUpdated.