3

MultiBindingXAML の 2 つの異なるポイントでa を使用しています。コードは次のとおりです。

<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>

私は奇妙な問題に直面しています。1MultiBindingつ目は完全に機能しますが、2 つ目は呼び出されません。最初の をコメントアウトするMultiBindingと、2 番目の が期待どおりに機能し始めます。

これは WPF の何らかの制限ですか? または、マルチバインディングについて何か不足していますか?

PS:RaisePropertyChangedは正しく呼び出されます。ただし、2 番目のバインドでは、コンバーターはまったく呼び出されません。

編集

コンバーターのコードは次のとおりです。

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

あなたの問題を分析しました。これは私にとってはうまくいっています。マルチバインディングに問題はありません。ブレークポイントのあるコンバーターが 2 回呼び出されたことを確認しましたか。それ以外の場合、問題は ChartMouseY と ChartMouseX にあります。ここに画像の説明を入力

于 2012-11-28T14:57:18.793 に答える