【问题标题】:Why does MultiBinding with a Converter not work within a ToolTip?为什么带有转换器的 MultiBinding 在工具提示中不起作用?
【发布时间】:2011-06-08 00:34:08
【问题描述】:

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

使用MultiBindingStringFormat 也是如此:

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

MultiBindingConverter 不会:

<ToolTipService.ToolTip>
  <StackPanel>
    <TextBlock>
      <TextBlock.Text>
        <MultiBinding Converter="{StaticResource multiValueConverter}">
          <Binding Path="Amt"/>
          <Binding Path="Currency"/>
        </MultiBinding>
      </TextBlock.Text>
    </TextBlock>        
  </StackPanel>
</ToolTipService.ToolTip>

最后一个示例中的绑定没有收到任何值。这不是工具提示之外的情况 - 在这种特定情况下绑定失败的原因是什么?

【问题讨论】:

    标签: wpf data-binding multibinding


    【解决方案1】:

    尝试在绑定上设置 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 "";
        [...]
    }
    

    【讨论】:

    • 不需要模式,但该线程上的解决方案确实解决了问题。有趣的是:我在研究这个问题时阅读了该页面,忽略了解决方案,认为“好吧,如果转换器只返回null,那就没用了。”我没有想到会有另一个通过正确参数的转换器!非常感谢。
    • 不客气。过去在多转换器中获得了一些乐趣,其中包括带有“未设置”值的奇怪执行。从那时起,我就像一只鹰一样看着输出窗口...... :)
    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2014-08-31
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 2017-02-19
      • 2011-01-21
      相关资源
      最近更新 更多