1

次のコードの何が間違っていますか?

コンパイル中に次のエラーが発生します。

'cc' という名前の要素が見つからなかったため、プロパティ 'TargetName' は 'Setter' の有効なターゲットを表していません。ターゲットは、それを使用するセッター、トリガー、または条件の前に宣言されていることを確認してください。

エラーなしでコンパイルできるようにコードをリファクタリングするにはどうすればよいですか?

PersonViewModel の値にバインドされた DataTrigger を使用してデータ テンプレートを切り替えたいだけです。

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

2 に答える 2

1

アップデート

ContentControl に Style を使用し、そこから 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>

更新
DataTemplate の View が 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>
于 2010-12-17T20:05:10.267 に答える
0

DataTrigger 全体は必要ありません。

これを読んで、DataTemplateSelector が正しく機能するようにします。

http://joshsmithonwpf.wordpress.com/2007/03/18/updating-the-ui-when-binding-directly-to-business-objects-that-are-modified/

于 2010-12-20T08:39:43.143 に答える