作为相当复杂的WPF工具提示的一部分,我正试图使用MultiBinding来生成基于两个属性的格式化文本。问题是,绑定的MultiConverter为其values
数组中的每个项接收DependencyProperty.UnsetValue
。
以下工作,使用单个Binding
:
<ToolTipService.ToolTip>
<StackPanel>
<TextBlock>
<TextBlock.Text>
<Binding Path="Amt" Converter="{StaticResource singleValueConverter}"/>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</ToolTipService.ToolTip>
使用MultiBinding
和StringFormat
:
<ToolTipService.ToolTip>
<StackPanel>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat='{0:C} in {1}'>
<Binding Path="Amt"/>
<Binding Path="Currency"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</ToolTipService.ToolTip>
但带有Converter
的MultiBinding
不会:
<ToolTipService.ToolTip>
<StackPanel>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource multiValueConverter}">
<Binding Path="Amt"/>
<Binding Path="Currency"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</ToolTipService.ToolTip>
上一个例子中的绑定没有接收到任何值。工具提示之外的情况并非如此——在这种特定情况下,发生了什么导致绑定失败?
尝试在绑定上设置Mode="OneWay"
此外,您是否检查了此问题和解决方案:http://social.msdn.microsoft.com/Forums/en-IE/wpf/thread/15ada9c7-f781-42c5-be43-d07eb1f90ed4
此错误的原因是工具提示尚未加载,因此DependencyProperty。GetValue返回DependencyProperty。UnsetValue。你应该添加一些代码来测试值为Dependency。UnsetValue。这个下面的代码展示了如何做到这一点。
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values[0] == DependencyProperty.UnsetValue || values[1] == DependencyProperty.UnsetValue)
return "";
[...]
}
试试这个:
<ToolTipService.ToolTip>
<StackPanel>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource multiValueConverter}">
<MultiBinding.Bindings>
<BindingCollection>
<Binding Path="Amt"/>
<Binding Path="Currency"/>
</BindingCollection>
</MultiBinding.Bindings>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</ToolTipService.ToolTip>