Кажется, что вы могли бы упростить это, не используя конвертер Multi-Binding. Если у вас есть коллекция объектов NPR, вы можете установить ее в качестве ItemsSource для списка. Затем используйте DataTemplate для форматирования того, как вы хотите, чтобы этот элемент отображался.
С помощью этой настройки вы можете создать шаблон, который показывает несколько полей из объекта NPR в одном TextBlock, используя что-то вроде:
<ComboBox
x:Name="NPRComboBox"
IsSynchronizedWithCurrentItem="False"
IsEditable="False"
SelectedItem={Binding SelectedNPR, Mode=TwoWay}"
>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<Run Text="{Binding Path=NewProdNumber, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" />
<Run> - </Run>
<Run Text="{Binding Path=NewProdNumberCombinedWithName, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" />
</TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Если у вас есть дополнительные свойства для объекта NPR, к которым вы хотите получить доступ, вы можете добавить в шаблон дополнительный раздел.
Обратите внимание, что «выбранный» элемент привязан к свойству ViewModel (или коду с выделенным кодом, или к чему-либо еще). Это было бы что-то вроде:
public NPR SelectedNPR
{
get { ... }
set
{
...
// don't forget INotifyPropertyChanged
...
}
}
EDIT
Вот пример, который, кажется, выполняет то, что вы указали при отображении устаревших данных в «SelectionBox», но не в выпадающем списке. Чтобы проверить это, попробуйте запустить его в KaXaml или что-то в этом роде. Затем начните вводить «Hello 3» и увидите, что он предлагает «Hello 30». Это указывает на то, что Combo знает об элементе. Теперь опустите список вниз и увидите, что его нет в списке. Если вы нажимаете клавишу со стрелкой вниз, она переходит от «Hello 20» к «Hello 40».
Следующим шагом будет настройка шаблонов таким образом, чтобы видимость шаблона ListBoxItem была привязана к «IsLegacy» в вашем объекте NPR. Затем добавьте как старые, так и новые элементы в коллекцию ItemsSource и привяжите их к списку.
<ComboBox IsEditable="True">
<ComboBoxItem >Hello 10</ComboBoxItem>
<ComboBoxItem >Hello 20</ComboBoxItem>
<ComboBoxItem Visibility="Collapsed">Hello 30</ComboBoxItem>
<ComboBoxItem >Hello 40</ComboBoxItem>
</ComboBox>