【发布时间】: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