DataContextオブジェクトにある程度の柔軟性がある場合は、選択したCheckPrinterプロパティをIDではなくデータオブジェクトタイプに変更し、SelectedValueではなくSelectedItemを使用するように切り替えることができます(何らかの理由で、SelectedValueは、特に初期ロード時に異なる動作をします)。次に、コード内のその値からIDを抽出します。
なんらかの理由でDataContextオブジェクトでCheckPrinterオブジェクトを使用できない場合は、IDのリストをItemsSourceとして使用し、再度SelectedItemを使用することで、UI側で反対方向に進むこともできます。リストにComboBoxItemsに必要なものを表示するには、IValueConverterを使用してIDに基づいて説明値を引き出す必要があります。
<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-Descriptionルックアップを実行するための単純なコンバーター(nullチェックとキャストチェックを追加):
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;
}
...
}