2012-11-22 7 views
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 
    } 
} 
+0

둘 다 전환 할 때 작동합니까? 즉, X 앞에 Y가 있습니까? – poke

+0

@poke : 당신 말이 맞아요.하지만 지금은 정말 혼란스러워지고 있습니다 ... 왜 그것은 한 방향으로 만 작동하고 다른 방향으로 작용하지 않습니까? :/ –

+0

주위를 전환하면 * both *가 작동한다는 의미입니까? o : – poke

답변

1

:

편집 여기

는 변환기의 코드입니다. 어느 날 잘 작동합니다. 멀티 바인딩 문제는 없습니다. 변환기를 두 번 호출했을 때 중단 점을 확인 했습니까? 그렇지 않으면 ChartMouseY 및 ChartMouseX에 문제가 있습니다. enter image description here

관련 문제