Почему MultiBinding с конвертером не работает во всплывающей подсказке? - PullRequest
3 голосов
/ 08 июня 2011

Для части довольно сложной подсказки 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 не делает:

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

привязки в последнем примере не получают никакого значения.Это не относится к всплывающей подсказке - что происходит так, что в данном конкретном случае сбой привязки происходит?

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Попробуйте установить 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 "";
    [...]
}
0 голосов
/ 04 сентября 2013

Попробуйте это:

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