3

MultiBinding在我的 XAML 中使用了两个不同的点。这是代码:

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

PS: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
    }
}
4

1 回答 1

1

我分析了你的问题。这对我来说很好。多重绑定没有错。你有没有检查过带断点的转换器是否被调用了两次。否则你的问题出在 ChartMouseY 和 ChartMouseX 上。在此处输入图像描述

于 2012-11-28T14:57:18.793 回答