TargetUpdated 이벤트가 이상적인 것처럼 보이는 문제가 발생했습니다. 불행히도 Multibinding에는 TargetUpdated 속성이 없습니다. 여전히이 문제를 해결할 수있는 방법이 있습니까? 아니면 완전히 다른 솔루션을 찾아야 할 필요가 있습니까? Multibinding에 NotifyOnTargetUpdated가 있지만 TargetUpdated 속성이 없습니다.
Heres는 일부 코드는 ...<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
}
바인딩을 Heres
에 도움이 그리고 내가 뭘 ' 찾고있는 숫자를 가져 와서 각도/애니메이션을 업데이트하는 함수에 전달합니다.
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 이벤트에서 사용하고자하는 것입니다.
MultiBinding 내의 개별 바인딩 중 하나에 TargetUpdated가 설정되어 있으면 충분합니까? – Goblin
아니요 애니메이션을 결정하는 값은 둘 다 변경되는 두 값에 대한 다중 변환기의 곱에서 비롯됩니다. –