2011-07-12 5 views
2

WPFウィンドウにこのコンボボックスがあります。ItemsSourceがロードされるとWPF ComboboxがSelectedValue経由でソースを変更しています

<ComboBox DisplayMemberPath="Description" SelectedValuePath="ID" ItemsSource="{Binding Source={StaticResource CvsPrinters}}" SelectedValue="{Binding CheckPrinterID}" /> 

私の問題は、ウィンドウをロードするときに、結合SelectedValueのではなくのItemsSource内の適切な項目にコンボボックスのSelectedValueのを設定するので、私の元データはのItemsSourceの最初の項目への変更を引き起こしているということです。

CheckPrinterIDはリストビュー選択のdatacontextに由来し、この問題はロード時にそのリストビューで最初に選択されたアイテムにのみ発生します。リストボックス内の別のアイテムを選択すると、コンボボックスが適切なアイテムを正しく選択しても問題ありませんが、残念ながら私の最初のアイテムが更新され、正しく表示されません。

答えて

0

共通のプロパティでListViewComboBoxを同期しようとしているようです。 ListViewでIsSynchronizedWithCurrentItemをTrueに設定し、ロード中にListViewSelectedItemまたはSelectedIndexが設定されていることを確認してください。

0

DisplayMemberPathの前にItemsSourceを再配置してみてください。

0

DataContextオブジェクトに柔軟性がある場合は、選択したCheckPrinterプロパティをIDではなくデータオブジェクトタイプに変更し、SelectedValueの代わりにSelectedItemを使用するように切り替えてみてください(何らかの理由でSelectedValueの動作が異なります)。初期ロード)、コード内のその値からIDを抽出します。

何らかの理由でDataContextオブジェクトのCheckPrinterオブジェクトを使用できない場合は、IDのリストをItemsSourceとして使用し、再度SelectedItemを使用して、UI側で逆方向に進むこともできます。あなたはその後、IDに基づいて説明値を引き出すためにIValueConverterを使用する必要がありますComboBoxItemsであなたが望むものを表示するようにリストを取得するには: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> 

とシンプルなコンバータを(一部を追加ヌルとキャストチェック):

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; 
     } 
     ... 
    }