2010-12-17 10 views
1

次のコードについて何が間違っていますか?WPF:トリガーターゲット 'cc'が見つかりません。ターゲットはセッター、トリガーの前に現れなければならない

私はコンパイル時にこのエラーを取得:「CC」という名前の要素が見つからなかったため

プロパティ「TargetNameは」は「セッター」の有効なターゲットを表していません。ターゲットがそれを使用するセッター、トリガーまたは条件の前に宣言されていることを確認してください。

エラーを発生させずにコードをコンパイルできるようにするには、どうすればコードをリファクタリングする必要がありますか?

私は、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

これは右見ていません。 'ContentControl'に' Content'として 'DataTemplate'を追加しません。私はあなたが1つを設定した後に(簡単に)テンプレートを切り替えることができるとは思わない?代わりに、 'DataContext'のデータに応じて、1つのテンプレート内のコンテンツの可視性を切り替えて、その一部を表示/非表示にすることができます。 – decyclone

答えて

1

あなたはそこからContentTemplateをContentControlにするためにスタイルを使用して変更することができ

更新

<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を継承しません。それはこれを使って作業しましたが、これはあなたが全体のDataTriggerのものを必要としない

<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も同じリンクを見つけましたが、私はそこで使用されている2つのContentControlについて完全に混乱しました。なぜそれを理解していない...私は明日それをテストし、皆さんに知らせる! – Elisabeth

+0

@List:私は同意します。更新された答えをチェックして、ContentControlからそれを実行してください。 –

+0

@Lisa:私は同意します。また、私が受け入れられた答えからリンクされた質問に答えを出しました。これをどうすればいいのかミスリーディングしました。 –

関連する問題