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