Если у вас есть некоторая гибкость в объекте DataContext, вы можете попробовать изменить выбранное свойство CheckPrinter на тип объекта данных вместо идентификатора и переключиться на использование SelectedItem вместо SelectedValue (по какой-то причине SelectedValue ведет себя по-разному, особенно на начальном этапе. загрузить), а затем извлечь идентификатор из этого значения в коде.
Если по какой-либо причине вы не можете использовать объекты CheckPrinter в своем объекте DataContext, вы также можете пойти в противоположном направлении на стороне пользовательского интерфейса, используя список идентификаторов в качестве ItemsSource и снова используя SelectedItem. Чтобы получить список, показывающий, что вы хотите в ComboBoxItems, вам потребуется использовать IValueConverter для извлечения значений Description на основе идентификаторов:
<ComboBox ItemsSource="{Binding Source={StaticResource CvsPrinterIds}}" SelectedItem="{Binding CheckPrinterID}" >
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock >
<TextBlock.Text>
<Binding>
<Binding.Converter>
<local:MyDescriptionLookupConverter Printers="{StaticResource CvsPrinters}"/>
</Binding.Converter>
</Binding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
и простой конвертер для поиска ID-описания (добавьте несколько проверок null и cast):
public class MyDescriptionLookupConverter : IValueConverter
{
public IEnumerable<Printer> Printers { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return Printers.First(p => p.Id == (int)value).Description;
}
...
}