2013-03-21 9 views
4

ObservableCollection의 항목 소스로 ComboBox가 있습니다. 따라서 ComboBox는 레이블로 구성됩니다.사라지는 항목과 관련된 이상한 문제

사용자가 생성 할 수있는 여러 개의 UserControls가 있으며 각 UserControls에는 여러 개의 ComboBox가있을 수 있습니다. UserControl이 만들어지면 UserControl의 이름을 가진 레이블이 ObservableCollection에 추가되므로 항목 소스가 ObservableCollection 인 모든 ComboBox에 최신 레이블이 추가됩니다.

모든 것이 제대로 작동하고 예상대로 새 UserControls가 생성 될 때 ComboBoxes가 채워집니다. 그러나 매우 이상한 문제가 발생합니다.

사용자가 한 UserControl의 ComboBox 드롭 다운 메뉴를 열면 모든 레이블을 올바르게 볼 수 있습니다.

그런 다음 사용자가 다른 UserControl의 ComboBox 드롭 다운 메뉴를 열면 항목이 모두 동일한 방식으로 표시됩니다. 이제 이상한 문제는 사용자가 이전 UserControl의 ComboBox로 돌아 가면 항목이 사라진다는 것입니다. 내가 디버깅하여 라벨이 여전히 항목으로 포함되어 있지만 높이가 0으로 설정되어있는 것과 같습니다 (디버깅시 높이가 0이 아니지만 26이 아니라는 것을 알았습니다). 것).

동일한 양의 라벨이 포함되어 있으며 위 스크린 샷에서 볼 수있는 것처럼 선택할 수 있지만 표시되지는 않습니다 (뭔가를 선택하면 작은 파란색 막대가 표시됨). 나는 어디에서나 라벨의 높이를 바꾸지 않을 것이다.

사용자가 WPF가 컬렉션에 CollectionView를 캐시한다는 것을 사용자가 주석 처리했습니다. 따라서 모든 ComboBox가 동일한 CollectionView 인스턴스를 공유합니다. 따라서 Label에는 하나의 시각적 부모 만있을 수 있으므로 사용자가 두 번째 ComboBox를 확장하면 첫 번째 ComboBox에서 레이블이 분리됩니다.

+1

왜 downvote? –

답변

1

여기가 해결책입니다. ComboBox을 이와 같이 변경하고 ObservableCollection<T>ComboBox에 묶으세요. ObservableCollection<Label>ObservableCollection<string>으로 변경해야합니다.

<ComboBox x:Name="cmb1" Height="24" Margin="0,27,0,0" VerticalAlignment="Top" Width="131"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <Label Content="{Binding}"/> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

이 정보가 도움이되기를 바랍니다.

+0

도움을 주셔서 감사합니다! –

+0

당신은 환영합니다. – Dilshod

관련 문제