2009-09-28 4 views
3

WPF의 스타일에서 데이터 바인딩에 문제가 있습니다.WPF 데이터 바인딩 및 스타일 (MVVM 포함)

기본 설정은 다음과 같습니다

<Style x:Key="{x:Type eo:Player}" TargetType="{x:Type eo:Player}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Team}" Value="A"> 
       <Setter Property="Template" Value="{StaticResource TeamATemplate}"></Setter> 
      </DataTrigger> 
     </Style.Triggers> 
</Style> 

스타일은 형 플레이어의 모든 객체에 적용됩니다. 이 객체는 Teams 유형의 특성을 갖습니다 (값이 A, B 및 C 인 열거 형). 플레이어 시각화에 적용된 템플릿에 플레이어가있는 팀에 따라 다릅니다.

이제는 모든 것이 MVVM 응용 프로그램에서 사용되고 Player 개체의 DataContext가 맨 위보기의 ViewModel로 설정된다는 문제가 있습니다. 나는 문제에 대해 뭔가를 찾기 위해 새로운 진단 옵션 (TRACELEVEL을) 사용이있어 :

System.Windows.Data Warning: 66 : BindingExpression (hash=30607723): Found data context element: Player (hash=35170261) (OK) 
System.Windows.Data Warning: 74 : BindingExpression (hash=30607723): Activate with root item ToolboxViewModel (hash=61398511) 
System.Windows.Data Warning: 104 : BindingExpression (hash=30607723): At level 0 - for ToolboxViewModel.Team found accessor <null> 

플레이어 오브젝트는 데이터 컨텍스트 요소 (그것이 의미하는 것은 무엇이나) 여전히 ToolboxViewModel를 사용하면서 발견 그러니까 기본적으로 DataContext로서. 이 문제를 어떻게 해결할 수 있습니까? 바인딩 표현식에서 스타일이 지정된 객체를 어떻게 참조 할 수 있습니까?

답변

3

나는이 이전에 생각하지 않은 이유를 알고하지 않습니다 : 그것은

-1

당신은 이미 스타일로 스타일을 지정하지 않은 방아쇠로 무엇이든 스타일을 지정할 수 없습니다. 다음을 수행해야합니다.

<Style x:Key="{x:Type eo:Player}" TargetType="{x:Type eo:Player}"> 
     <Setter Property="Template" Value="{StaticResource TeamBTemplate" /> 
     <Style.Triggers> 
       <DataTrigger Binding="{Binding Team}" Value="A"> 
         <Setter Property="Template" Value="{StaticResource TeamATemplate}"></Setter> 
       </DataTrigger> 
     </Style.Triggers> 
</Style> 

다음에 사용자 스타일이 좋아야합니다. 그 바인딩 경고는 혼란 스럽다.

+0

문제가 지속 {RelativeSource 자체} 완벽하게 잘 작동

<Style x:Key="{x:Type eo:Player}" TargetType="{x:Type eo:Player}"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Team}" Value="A"> <Setter Property="Template" Value="{StaticResource TeamATemplate}"></Setter> </DataTrigger> </Style.Triggers> </Style> 

. 이 모든 원인은 DataContext가 상위 UserControl에서 상속되고 바인딩이 UserControl의 DataContext (일명 ToolboxViewModel)에서 Team 속성을 찾으려고한다는 것입니다. 문제는 바인딩에서 스타일이 지정된 객체를 어떻게 든 참조해야한다는 것입니다. – chrischu

관련 문제