为什么带有转换器的MultiBinding不能在ToolTip中工作?

时间:2011-06-08 00:34:09

标签: wpf data-binding multibinding

对于相当复杂的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>

上一个示例中的绑定不会收到任何值。在工具提示之外的情况并非如此 - 在这种特定情况下,绑定失败的原因是什么?

2 个答案:

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