2010-01-26 3 views
1

나는 아이템 컬렉션을 제공하는 ViewModel을 가지고 있습니다. ActiveItem 속성도 있습니다. Items 컬렉션은 ActiveItem을 포함 할 수도 있고 포함하지 않을 수도 있습니다.WPF 하이라이트 아이템

내가 원하는 (XAML에서) 항목을 목록으로 표시하고 활성 항목과 동일한 항목을 강조 표시합니다. 당신이 볼 수 있듯이

<ListBox ItemsSource="{Binding Items}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border x:Name="outerBorder" Background="Green"> 
       <TextBlock Text="{Binding ItemId}" /> 
      </Border> 
      <DataTemplate.Triggers> 
       <DataTrigger 
        Binding="{Binding  
         Path=DataContext.Item.ItemId,  
         RelativeSource={RelativeSource TemplatedParent},  
         Mode=Default}" 
        Value="{Binding  
         Path=DataContext.ActiveItem.ItemId,  
         RelativeSource={RelativeSource AncestorType=Window},  
         Mode=Default}" 
       > 
        <Setter TargetName="outerBorder" 
         Property="Background" Value="Orange" /> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

내가 ActiveItem와 현재 항목과 일치하는 DataTrigger를 사용하려고 시도했지만 작동하지 않습니다

는 나는 아무 성공 다음 노력했다. 이것이 DataTrigger.Value의 Binding을 사용하려고 시도한 것과 관련이 있다고 생각합니다. 다른 예제는 보지 못했습니다.

어떻게하면 좋을지 아이디어가 있습니까?

감사합니다,

다니엘

답변

3

당신이 MVVM을 사용하고 있기 때문에, 왜 그냥보기 모델이 활성화의 여부보기를 알려주는 속성을 노출 있나요? 그러면 논리가 사용자의 시각에서 VM으로 전달됩니다.

+0

그래서 Items (모델 객체)를 직접 노출하는 대신 ItemViewModel을 만들어 노출해야합니다. 나는 IsActive 속성을 내 Item 모델 객체에 직접 추가하는 것을 꺼린다. – djskinner

관련 문제