【问题标题】:Why does only one out of two multibindings work?为什么两个多重绑定中只有一个有效?
【发布时间】:2012-11-22 12:21:44
【问题描述】:

我在我的 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
    }
}

【问题讨论】:

  • 两者切换时是否有效,即在 X 之前制作 Y?
  • @poke:你是对的......但现在我真的很困惑......为什么它以一种方式工作而不是另一种? ://
  • 你的意思是,如果你把它们换掉,两个都可以工作?我没想到:o
  • @poke:不幸的是,是的,它们在切换时都可以工作......这种行为的原因可能是什么?
  • 能否包含 CoordinateToStringConverter 的代码?与此同时,您可以尝试在多重绑定中的绑定上放置一个调试转换器,看看转换是否被命中。

标签: c# wpf binding multibinding


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多