3

子コントロールの Resource セクション内から Window.Resources にアクセスする方法がわかりません。子コントロールで定義されている DataTemplate があり、その DataTemplate をビュー モデル (Window.Resources で定義) の ICommand にバインドしたい

編集:RadPaneGroupコードをメイン ウィンドウ XAML に追加しました。ここで、オブジェクトをインスタンス化しProjectsViewModelます。ProjectsViewに含まれるコントロールRadDocumentPaneは、以下にリストした子コントロールです。

メインウィンドウ

<Window.Resources>
    <viewModels:ProjectsViewModel x:Key="ProjectsViewModel" />
</Window.Resources>
<telerik:RadDocking HasDocumentHost="False" >
    <telerik:RadSplitContainer>
        <telerik:RadPaneGroup DataContext="{StaticResource ProjectsViewModel}">
            <telerik:RadDocumentPane Header="Projects">
                <views:ProjectsView/>
            </telerik:RadDocumentPane>
        </telerik:RadPaneGroup>
    </telerik:RadSplitContainer>
    ...

チャイルド コントロール

<Control.Resources>
    <!--Data template for the Task object-->
    <DataTemplate  DataType="{x:Type models:Task}">
        <StackPanel>
            <TextBlock Text="{Binding DisplayName}" Foreground="Red" 
                       FontSize="16" FontFamily="Verdana" />
            <telerik:RadContextMenu.ContextMenu>
                <telerik:RadContextMenu >
                    <telerik:RadMenuItem Header="New Project" 
                            Command="{Binding NewProjectCommand}"/>
                </telerik:RadContextMenu>
            </telerik:RadContextMenu.ContextMenu>
        </StackPanel>
    </DataTemplate>

上記の XAML のバインドは、Task オブジェクトにバインドしようとしています。ただし、私の ICommand は ViewModel (ProjectsViewModel) にあります。バインディングを変更しようとしましたCommand="{Binding NewProjectCommand, Source={StaticResource ProjectsViewModel}}が、例外がスローされます。

私は何を間違っていますか?

ありがとう、

4

2 に答える 2

4

DataTemplate は ItemsControl (ListBox など) で使用されているように見えるため、親コンテナーのプロパティにバインドしたいのに対しCommand="{Binding NewProjectCommand}"、タイプのプロパティにバインドしようとします。Taskしたがって、次のような RelativeSource バインディングを使用する必要があります。

Command="{Binding Path=DataContext.NewProjectCommand, RelativeSource=
         {RelativeSource FindAncestor, AncestorType={x:Type views:ProjectsView}}}" 
于 2013-04-01T21:55:42.417 に答える