2016-07-13 11 views
1

Я пытаюсь связать ComboBox с номером DataContext.Связывание Combobox не работает, когда используется конвертер

<ComboBox ItemsSource="{Binding Path=Numbers}" 
           SelectedValue="{Binding Path=CurrentNumber,Mode=TwoWay}"> 
</ComboBox> 

Приведенный выше код работает, но когда я пытаюсь изменить то, как элементы отображаются с помощью преобразователя не реализующий IMultiValueConverter и MultiBinding ничего не отображается. Я отлаживал метод, реализующий IMultiValueConverter, и это не выполнение. В чем может быть проблема?

<ComboBox ItemsSource="{Binding Path=Numbers}" 
           SelectedValue="{Binding Path=CurrentNumber,Mode=TwoWay}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <TextBlock.Text> 
        <MultiBinding Converter="{StaticResource MultiUnitConverter}" ConverterParameter="{x:Static enumerations:Quantity.Length}" > 
         <Binding Path="."/> 
         <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Window}}" Path="DataContext.CurrentUnit"/> 
        </MultiBinding> 
       </TextBlock.Text> 
      </TextBlock> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

Update:

Я попытался следующие вместо ComboBox, преобразователь обжигают и данные загружены, но не отображается!

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding Converter="{StaticResource MultiUnitConverter}" ConverterParameter="{x:Static enumerations:Quantity.Length}" > 
      <Binding Path="CurrentNumber"/> 
      <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Window}}" Path="DataContext.CurrentUnit"/> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

следующие работы: хотя

<TextBlock> 
    <TextBlock.Text> 
     <Binding Path="CurrentNumber"></Binding> 
    </TextBlock.Text> 
</TextBlock> 
+1

Можете ли вы отобразить * что-нибудь в этом текстовом блоке? Как насчет временного изменения шаблона на ''? –

+0

@EdPlunkett Я тоже это пробовал. Обновлен вопрос. Нет успеха :( – Vahid

+0

Я бы очень хотел увидеть источник этого конвертера. –

ответ

1

Для всех, кто может застрять в этом будущем и испортить весь свой вечер, это решение, которое я нашел!

Кажется, что добавление StringFormat решает проблему!

<ComboBox ItemsSource="{Binding Path=Numbers}" SelectedItem="{Binding Path=Number, Mode=TwoWay}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <TextBlock.Text> 
        <MultiBinding 
           Converter="{StaticResource MultiUnitConverter}" 
           ConverterParameter="{x:Static enumerations:Quantity.Length}" 
           StringFormat="{}{0:0.###}"> 
         <Binding Path="."/> 
         <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Window}}" Path="DataContext.CurrentUnit"/> 
        </MultiBinding> 
       </TextBlock.Text> 
      </TextBlock> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 
0

ли вы определить конвертора ресурс где-то в вашем XAML? Если нет, вы должны это сделать. Например, если ваш ComboBox живет в UserControl вы могли бы добавить:

<UserControl.Resources> 
    <local:MultiUnitConverter x:Key="multiUnitConverter"/> 
</UserControl.Resources> 

И, конечно, нужно будет обновить конвертер StaticResource, чтобы соответствовать регистрозависимому ключу выше.

+0

Спасибо, Тим. Я уже это сделал. – Vahid

+0

Я думаю, что он, вероятно, узнает об этом, если это так, я получаю исключение XamlParseException a StaticResource с несуществующим ResourceKey –

+0

@EdPlunkett Ресурс есть, и я не получаю никаких исключений. Он просто не вызван! – Vahid