2012-04-04 28 views
1

私はUserControl1とUserControl2を含むウィンドウを持っています。これらのユーザーコントロールには独自のビューモデルがあります。また、これらのユーザーコントロールはUserControl3を使用してデータを表示します。したがって、UserControl1がUserControl3を使用する場合、UserControl3はUserControl1と同じviewmodelを持ちます。WPF usercontrolコマンドのウィンドウへのバインディングviewmodel

UserControl1のviewmodelにあるコマンドを呼び出すUserControl3にバインディングがあります。

しかし、私はそれを動作させる方法を見つけることができません。どんな助けも歓迎されます。どうもありがとうございました。ここで

動作しない私の結合である:

<UserControl x:Class="MyNamespace.UserControl3"    
     xmlns:local="clr-namespace:MyNamespace">  
<UserControl.Resources>   
    <DataTemplate DataType="{x:Type g:GraphNode}"> 
     <StackPanel>    
      <StackPanel.ContextMenu> 
       <ContextMenu> 
        <MenuItem Header="My Command" Command="{Binding Path=DataContext.MyCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:UserControl3}}}"/> 
       </ContextMenu> 
      </StackPanel.ContextMenu>    
      <Grid> 
       <ContentControl Content="{Binding Data}"/>      
      </Grid> 
     </StackPanel>    
    </DataTemplate>  
</UserControl.Resources> 

答えて

1

これは私のアプリで動作します。

<DataTemplate DataType="{x:Type g:GraphNode}"> 
     <StackPanel Tag="{Binding}"> 
      <StackPanel.ContextMenu> 
       <ContextMenu> 
        <MenuItem Header="My Command" Command="{Binding Path=PlacementTarget.Tag.MyCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}" /> 
       </ContextMenu> 
      </StackPanel.ContextMenu> 
     </StackPanel> 
    </DataTemplate> 

キーはContextMenusが別のウィンドウの上にあるということですので、あなたあなたのようにdatacontextsにアクセスすることはできません。
Commandを含むオブジェクトがStackPanelのタグ(ContextMenuPlacementTarget)に設定されているように、これを適合させる必要があります。

関連する問題