2009-09-28 115 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類型的屬性(Enum具有值A,B和C)。根據球員在模板中應用的視覺化球隊的不同而有所不同。

,現在出現的問題是,整個事情是在MVVM應用程序中使用,並且以某種方式播放器對象的DataContext獲取設置爲最頂層的視圖的視圖模型。我使用了新的診斷選項(的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

我不知道爲什麼我沒有想到這早些時候:

<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> 

它與{的RelativeSource自}

-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

問題仍然存在完美的罰款。整件事的原因是(至少這是我最好的猜測),其在DataContext是從父用戶控件繼承,因此,結合嘗試找到在用戶控件的DataContext的團隊屬性(又名ToolboxViewModel)。問題是我需要以某種方式引用綁定中的樣式對象。 – chrischu 2009-09-28 13:49:50