2011-09-27 4 views
1

DataTable에 바인딩 된 ComboBox가 있습니다. 추가 ComboBoxItem을 목록 상단에 추가하려고합니다. 목록을 사용자 정의 할 수있는 링크를 넣을 수 있습니다. 현재 저는 DataTable 상단에 더미 행을 삽입하고 ComboBox에서 DataTrigger를 사용하여 올바르게 표시합니다. 그러나 나는 정확한 결과를 얻지 못하고있다.데이터 바인딩 문제가있는 WPF ComboBoxItem

두 가지 방법을 시도했습니다. 처음에는 DataTrigger가 더미 항목을 TextBlock이 포함 된 ControlTemplate으로 바꿉니다.

<ComboBox IsEditable="True" Name="comboWell" ItemsSource="{Binding}" DisplayMemberPath="wellId"> 
    <ComboBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ComboBoxItem}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding wellId}" Value="(settings)"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="ComboBoxItem"> 
           <TextBlock Text="Customize..." /> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.ItemContainerStyle> 
</ComboBox> 

결과가 제대로 표시되지만 해당 항목에 마우스 오버 강조 표시가 없습니다. 목록의 나머지 부분은 정상적으로 작동하지만 그 위에 마우스를 올리면 한 항목이 전혀 반응하지 않습니다. 추가 트리거 및 스타일을 추가하여 마우스 오버 효과를 적용 해 보았지만 아무 변화가 없습니다.

내가 시도한 두 번째 방법은 항목을 ControlTemplate으로 완전히 바꾸지 않고 항목의 모양을 변경하는 것이 었습니다.

<ComboBox IsEditable="True" Name="comboWell" ItemsSource="{Binding}" DisplayMemberPath="wellId"> 
    <ComboBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ComboBoxItem}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding wellId}" Value="(settings)"> 
        <Setter Property="Content" Value="Customize..." /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.ItemContainerStyle> 
</ComboBox> 

이 기능은 일반 목록 항목과 유사하게 작동합니다. 그러나 항목이 비어 있습니다. 원본 텍스트 나 DataTrigger에서 설정하려고 시도하는 텍스트가 없습니다. 오류가없고 빈 목록 항목 만 있습니다.

더 좋은 방법이 있나요?

답변

2

DisplayMemberPath를 제거하고

<ComboBox IsEditable="True" Name="comboWell" ItemsSource="{Binding }"> 
    <ComboBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ComboBoxItem}"> 
      <Setter Property="Content" Value="{Binding wellId}" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding wellId}" Value="(settings)"> 
        <Setter Property="Content" Value="Customize..." /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.ItemContainerStyle> 
</ComboBox> 

DisplayMemberPath 실제로는 텍스트 DisplayMemberPath 항목에 바인딩 된과 항목 템플릿 그냥 TextBlock을해야 말하는 바로 가기 방법 스타일에 기본 콘텐츠를 추가하고, 나는 당신이 스타일에서 가지고 있던 것이 무엇이든지 덮어 쓰는 것 같았습니다.

+0

그건 속임수 였어! 고마워요! – Nairou