3
XAML의 두 가지 점에서 MultiBinding
을 사용하고 있습니다. 다음은 코드입니다.두 개 중 하나만 멀티 바인드가 작동합니까?
<StatusBarItem>
<StackPanel Orientation="Horizontal">
<TextBlock Text="X " />
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource CoordinateToStringConverter}" TargetNullValue="-">
<Binding Path="ChartMouseX" />
<Binding Path="AxisSettingsViewModel.XAxisSettings.LabelFormat" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<TextBlock Text=" Y " />
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource CoordinateToStringConverter}" TargetNullValue="-">
<Binding Path="ChartMouseY" />
<Binding Path="AxisSettingsViewModel.YAxisSettings.LabelFormat" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</StatusBarItem>
나는 이상한 문제에 직면하고 있습니다. 첫 번째 MultiBinding
은 완벽하게 작동하지만 두 번째는 호출되지 않습니다. 처음으로 MultiBinding
을 주석 처리하면 두 번째 것은 예상대로 작동하기 시작합니다.
WPF에서는 이러한 제한이 있습니까? 아니면 멀티 바인딩에 대해 뭔가 빠졌나요?
추신 : RaisePropertyChanged
이 올바르게 호출됩니다. 그러나 두 번째 바인딩에서 변환기는 전혀 호출되지 않습니다. 나는 당신의 문제를 분석 한
using System;
using System.Globalization;
using System.Windows.Data;
namespace LogViewer.Converters
{
public class CoordinateToStringConverter : IMultiValueConverter
{
#region IMultiValueConverter members
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values != null && values.Length == 2)
{
object value = values[0];
string format = values[1].ToString();
if (value is DateTime)
return ((DateTime)value).ToString(format);
if (value is TimeSpan)
return ((TimeSpan)value).ToString();
if (value is double)
return ((double)value).ToString(format);
}
return null;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
#endregion
}
}
둘 다 전환 할 때 작동합니까? 즉, X 앞에 Y가 있습니까? – poke
@poke : 당신 말이 맞아요.하지만 지금은 정말 혼란스러워지고 있습니다 ... 왜 그것은 한 방향으로 만 작동하고 다른 방향으로 작용하지 않습니까? :/ –
주위를 전환하면 * both *가 작동한다는 의미입니까? o : – poke