MVVMを学習するアプリケーションを開発しています。私は今問題がありますが、私と同じような場合は見つかりませんでした。WPF ComboBoxItemスタイルは、コンボボックスがフォーカスを取得した後に読み込まれます。
まず私のコード:
- プロパティ::文字列の名前
- プロパティ:BOOL IsSelected
<ComboBox Width="100" DisplayMemberPath="Name" ItemsSource="{Binding MyList}">
<ComboBox.Resources>
<Style TargetType="ComboBoxItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ComboBox.Resources>
</ComboBox>
私はこのオブジェクトリストを私のComboBox
にバインドし、IsSelected
- 私のオブジェクトのプロパティはIsSelected
に - ComboBoxItem
のプロパティ。バインディングは正常に動作し、オブジェクトはComboBox
にあり、項目を選択するとIsSelected
- プロパティが更新されます。
ただし、アプリケーションの開始時に、選択した項目が表示されないという問題があります。選択した項目が表示されるように、ComboBox
をクリックする必要があります。私はComboBoxItem
のスタイルは、親がフォーカスを取得した後に読み込まれると思う。
解決策はありますか?
問題が確認されました。コンボボックスアイテムのUIは、ポップアップリストが実際に開かれたときにのみ作成されます。オープンする前に、項目に基づくスタイルは効果を持ちません。おそらく 'SelectedItem' /' SelectedValue'を代わりに使用しなければなりません。 – grek40
ありがとう、grek!私は今、IsSelectedが真であるオブジェクトを返す新しいreadonlyプロパティを持っています。そして、私はComboboxのSelectedItemをこの新しいプロパティ(Mode = OneTime)にバインドしました。今は動作します。しかし、これは不必要な追加プロパティが必要な回避策だと私は思う。だから誰かが主な問題を解決するための解決策を見つけることができれば幸いです。 –
私はより多くの回避策を提供することができます...コンボボックスの 'Loaded'イベントのように、オープン、更新、終了:' cb1.IsDropDownOpen = true; cb1.UpdateLayout(); cb1.IsDropDownOpen = false; 'しかし、選択したアイテム/値で作業することは、回避策のほうが少なく、より標準的なアプローチです。 IsSelectedアプローチは、単一選択よりも複数選択シナリオに適しています。 – grek40