2010-12-17 12 views
1

erscheinen, was ist falsch an dem folgenden Code?WPF: Kann das Auslöserziel 'cc' nicht finden. Das Ziel muss vor jedem Setter, Trigger

ich diesen Fehler während der Kompilierung:

Die Eigenschaft ‚Targetname‘ stellt kein gültiges Ziel für die ‚Setter‘, weil ein Element ‚cc‘ genannt wurde nicht gefunden. Stellen Sie sicher, dass das Ziel vor allen Setter, Triggern oder Bedingungen deklariert ist, die es verwenden.

Wie muss ich meinen Code umgestalten, damit ich ihn ohne Fehler kompilieren kann?

Ich möchte nur eine Datatemplate mit DataTrigger an einen Wert in meinem PersonViewModel gebunden wechseln!

<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

Das sieht nicht richtig aus. Sie fügen ein 'DataTemplate' nicht als' Content' zu einem 'ContentControl' hinzu. Ich glaube nicht, dass Sie die Vorlagen (einfach) nach der Einrichtung wechseln können? Stattdessen können Sie die Sichtbarkeit von Inhalten innerhalb einer Vorlage ändern, um Teile davon in Abhängigkeit von Daten in 'DataContext' anzuzeigen/auszublenden. – decyclone

Antwort

1

aktualisieren

Sie einen Stil für die Content verwenden können und die Content ändern von dort

<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
Ich verstehe nicht, warum die Ansicht des in der DataTemplate erbt den DataContext nicht. Ich habe keine Ahnung, warum das nötig ist.

<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

yeah Meleak der gleiche Link, den ich auch gefunden habe, aber ich bin total verwirrt über TWO ContentControls dort verwendet. Ich habe es einfach nicht verstanden warum ... Ich werde es morgen testen und euch wissen lassen! – Elisabeth

+0

@List: Ich stimme zu. Überprüfen Sie meine aktualisierte Antwort, um es aus dem ContentControl statt –

+0

@Lisa zu tun: Ich stimme zu. Auch habe ich eine Antwort in der Frage gemacht, die ich seit der angenommenen Antwort verbunden habe, gibt es ein kleines Missleading darüber, wie das getan werden sollte –

Verwandte Themen