MVVM을 배우기위한 응용 프로그램을 개발 중입니다. 나는 지금 문제가있다. 그러나 나는 나의 것과 비슷한 사건을 발견 할 수 없었다.WPF ComboBoxItem 스타일은 Combobox가 포커스를 얻은 후에로드됩니다.
먼저 내 코드 :
- 재산권 : 문자열 이름
- 재산권 : 부울에 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가 true 인 객체를 반환하는 새로운 readonly 속성이 있습니다. 그리고 Combobox의 SelectedItem을이 새 속성 (Mode = OneTime)에 바인딩했습니다. 이제 작동합니다. 하지만이 방법은 불필요한 추가 속성이 필요한 해결 방법이라고 생각합니다. 따라서 누군가가 주요 문제를 해결할 수있는 해결책을 찾을 수 있다면 행복 할 것입니다. –
나는 combobox'Loaded' 이벤트와 같이 더 많은 대안을 제공 할 수 있습니다 : open, update and close :'cb1.IsDropDownOpen = true; cb1.UpdateLayout(); cb1.IsDropDownOpen = false;'그러나 선택된 항목/값을 사용하면 해결 방법이 줄어들고 표준 접근 방식이 향상됩니다. IsSelected 접근법은 단일 선택보다 다중 선택 시나리오에 더 적합합니다. – grek40