2014-09-19 73 views
0

我們使用分層模板來填充菜單項祖先結合水平沒有菜單項命令工作

<UserControl.DataContext> 
     <local:MenuViewModel/> 
    </UserControl.DataContext>  

    <Grid> 
     <!--Initialize the Menu--> 
     <Menu Name="Part_Menu" ItemsSource="{Binding MenuCollection}" Background="#E5E5E5" VerticalAlignment="Center"> 
      <Menu.ItemTemplate> 
       <HierarchicalDataTemplate ItemsSource="{Binding MenuItemCollection}"> 
        <TextBlock Text="{Binding Header}" /> 
        <HierarchicalDataTemplate.ItemContainerStyle> 
         <Style TargetType="MenuItem"> 
          <Setter Property="CommandParameter" Value="{Binding Header}"/> 
          <Setter Property="VerticalAlignment" Value="Center"/> 
          <Setter Property="Command" 
            Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:MenuViewModel}, AncestorLevel=2,Mode=FindAncestor},Path=MenuClick}"></Setter> 
         </Style> 
        </HierarchicalDataTemplate.ItemContainerStyle>      
       </HierarchicalDataTemplate> 
      </Menu.ItemTemplate> 
     </Menu> 
    </Grid> 

在此我試圖綁定MenuClick(ICommand的)到菜單項,但它沒有正確綁定

我檢查以下鏈接論壇

[http://stackoverflow.com/questions/23941314/wpf-how-can-i-create-menu-and-submenus-using-binding?rq=1][1] 

在此命令在MenuModel添加的結合,我需要在MenuViewmodel到命令

回答

2

的結合是這樣的:

{Binding RelativeSource={RelativeSource AncestorType={x:Type local:MenuViewModel},  
             AncestorLevel=2, Mode=FindAncestor} 

..是不工作的,因爲AncestorType不從UIElement派生。

綁定的路徑應該是DataContext.MenuClick,並且AncestorType應該是Menu。把它放在一起:

<Setter Property="Command" 
     Value="{Binding Path=DataContext.MenuClick, 
         RelativeSource={RelativeSource AncestorType={x:Type Menu}, 
                 AncestorLevel=2}}"> 
</Setter> 

Mode=FindAncestor是默認模式,所以我離開了。

MSDN: RelativeSource.AncestorType Documentation中只說明瞭理論上可以使用任何類型,然而,FindAncestor檢查視覺樹來嘗試找到給定的祖先,所以無論你尋找的類型必須存在於視覺樹中。希望這可以幫助。