2010-12-17 72 views
1

以下代碼有什麼問題?WPF:找不到觸發目標'cc'。目標必須出現在任何Setters,Triggers

我編譯時出現此錯誤:

酒店「的TargetName」並不代表對「二傳手」一個有效的目標,因爲沒有找到名爲「CC」的元素。確保在任何使用它的Setters,Triggers或Conditions之前聲明目標。

如何重構我的代碼,以便我可以無錯地編譯它?

我只想切換DataTrigger綁定到我的PersonViewModel中的值的數據模板!

<ContentControl x:Name="cc" Grid.Column="1"> 
      <DataTemplate> 
       <DataTemplate.Triggers> 
        <DataTrigger Binding="{Binding Path=CurrentPersonViewModel.IsNew}" Value="True"> 
         <Setter TargetName="cc" Property="ContentTemplate" Value="{DynamicResource NewPersonId}" /> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding Path=CurrentPersonViewModel.IsNew}" Value="False"> 
         <Setter TargetName="cc" Property="ContentTemplate" Value="{DynamicResource SelectedPersonId}" /> 
        </DataTrigger> 
       </DataTemplate.Triggers> 
      </DataTemplate> 
     </ContentControl> 
+0

這看起來不正確的。您不會將'DataTemplate'作爲Content添加到'ContentControl'。我不認爲你可以在設置好之後輕鬆切換模板?相反,您可以切換一個模板中內容的可見性,以根據DataContext中的數據顯示/隱藏其中的部分內容。 – decyclone 2010-12-17 19:00:38

回答

1

更新

你可以從那裏使用樣式爲ContentControl中,改變的ContentTemplate

<ContentControl Name="cc" Grid.Column="1"> 
    <ContentControl.Style> 
     <Style TargetType="ContentControl"> 
      <Setter Property="ContentTemplate" Value="{DynamicResource SelectedPersonId}"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=CurrentPersonViewModel.IsNew}" Value="True"> 
        <Setter Property="ContentTemplate" Value="{DynamicResource NewPersonId}" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ContentControl.Style> 
</ContentControl> 

UPDATE
我不明白的,爲什麼觀的DataTemplate不會繼承DataContext。明白了爲什麼這是必要的

<DataTemplate x:Key="NewPersonId"> 
    <local:NewPersonView DataContext="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContentControl}}, Path=DataContext.CurrentPersonViewModel}" /> 
</DataTemplate> 

<DataTemplate x:Key="SelectedPersonId"> 
    <local:SelectedPersonView DataContext="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContentControl}}, Path=DataContext.SelectedPersonViewModel}"/> 
</DataTemplate> 
+0

是的Meleak我也找到了同樣的鏈接,但我對這裏使用的兩個ContentControls完全感到困惑。只是不明白,爲什麼......我會明天測試它,讓你們知道! – Elisabeth 2010-12-17 20:29:16

+0

@List:我同意。檢查我的更新答案,從ContentControl代替 – 2010-12-17 20:56:23

+0

@Lisa:我同意。此外,我在我接受的問題中提出了一個答案,因爲接受的答案存在一個小小的誤導,應該怎麼做。 – 2010-12-17 21:47:55