为什么两个多重绑定中只有一个有效?

时间:2012-11-22 12:21:45

标签: c# wpf binding multibinding

我在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中的某种限制吗?或者我错过了关于多重绑定的事情?

P.S:正确调用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
    }
}

1 个答案:

答案 0 :(得分:1)

我已经分析了你的问题。这对我来说很好。多绑定没有错。 你用断点检查了转换器是否被调用了两次。否则,您的问题出在ChartMouseY和ChartMouseX。enter image description here