2012-04-04 5 views
1

У меня есть окно, которое содержит UserControl1 и UserControl2. Эти пользовательские элементы управления имеют свои собственные режимы просмотра. Кроме того, эти пользовательские элементы управления используют UserControl3 для отображения данных. Таким образом, когда UserControl1 использует UserControl3, UserControl3 имеет ту же модель представления, что и UserControl1.WPF usercontrol command binding to window viewmodel

У меня есть привязка в UserControl3, которую я хочу вызвать командой, которая находится на viewmodel UserControl1.

Но я не могу найти способ заставить его работать. Любая помощь приветствуется. Большое спасибо.

Вот мое связывание, который не работает:

<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 находятся на другое окне, так что вы не могут получить доступ к таким данным, как обычно.
Вам нужно будет адаптировать это так, чтобы объект, содержащий искомый Command, был установлен как тег StackPanel (который является PlacementTarget вашего ContextMenu).

Смежные вопросы