2

WPF ウィンドウにこのコンボボックスがあります。

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

私の問題は、ウィンドウをロードするときに、コンボボックスの SelectedValue を ItemsSource の適切な項目に設定するのではなく、SelectedValue バインディングによってソース データが ItemsSource の最初の項目に変更されることです。

CheckPrinterID は、リストビューの選択データ コンテキストからのものであり、この問題は、ロード時にそのリストビューで最初に選択された項目に対してのみ発生します。リストボックスで別のアイテムを選択すると、コンボボックスは適切なアイテムを正しく選択し、すべて問題ありませんが、残念ながら最初のアイテムが更新され、現在は正しくありません。

4

3 に答える 3

1

私はあなたが同期し、共通のプロパティListViewを介してしようとしていると思います。ListViewでIsSynchronizedWithCurrentItemをTrueにComboBox設定してみて、ロード中にまたはforが設定されていることを確認してください。SelectedItemSelectedIndexListView

于 2011-07-12T18:01:11.977 に答える
0

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;
        }
        ...
    }
于 2011-07-13T00:27:40.763 に答える
0

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

于 2011-07-12T18:54:32.903 に答える