コンボボックスのドロップダウン リスト (itemssource) に、新しい製品リクエスト アイテムが含まれています。ドロップダウン リストにないレガシー データにバインドしたいと考えています。複雑にするために、IMultiValueConverter でマルチバインディングを使用してフィールドを結合して表示しています。また、バインドされたフィールドの名前が、バインドされているプロパティの名前と一致しません。
コンボボックスの itemssource は、NewProductRequests のリストです。この NPR オブジェクトから NewProdNumber と NewProdName が結合され、型コンバーターによってドロップダウン リストに表示されます。ConvertBack メソッドは、値 NewProdNumber および NewProdNumberCombinedWithName を返します。これら 2 つの値は、わずかに異なる名前でデータベース フィールドに保存されます。この例では、DBProdRequestNumber および DBProdRequestTitle と呼びます。
新しいアイテムの表示と保存に成功しました。問題は、リストにないレガシー データを表示する方法を理解していないことです。新しい製品リクエストとしての資格がなくなったため、リストにありません。
問題の XAML は次のとおりです (itemssource はコード ビハインドで設定されています)。
<ComboBox x:Name="NPRComboBox" IsSynchronizedWithCurrentItem="False" IsEditable="False">
<ComboBox.SelectedItem>
<MultiBinding Converter="{StaticResource combineNPRStuffMultiConverter}">
<Binding Path="DBProdRequestNumber" UpdateSourceTrigger="PropertyChanged"/>
<Binding Path="DBProdRequestTitle" UpdateSourceTrigger="PropertyChanged"/>
</MultiBinding>
</ComboBox.SelectedItem>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock DataContext="{Binding}">
<TextBlock.Text>
<MultiBinding Converter="{StaticResource combineNPRStuffMultiConverter}">
<Binding Path="NewProdNumber" UpdateSourceTrigger="PropertyChanged"/>
<Binding Path="NewProdNumberCombinedWithName" UpdateSourceTrigger="PropertyChanged"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Julie Lermanのこの MSDN Magazine の例に基づいて、DataGridTemplateColumn.CellEditingTemplate を使用して解決したデータグリッドとコンボボックスの同様の問題。もちろん、この場合、データグリッドは使用していません。
助けてくれてありがとう。