2014-02-10 34 views
2

我正在创建一个MVVM Wpf客户端应用程序。我想在主视图中为其应用程序创建一个菜单,其菜单项名为“窗口”。该菜单项将使用由应用程序中运行的活动窗口列表组成的菜单项子菜单自动更新。我创建了一个ViewManager,每个View都注册自己以编译活动窗口的列表。如何在XAML中创建“窗口”菜单?

我试图做到这一点在XAML,但得到当我点击“窗口”

<MenuItem Header="Window"> 
    <ItemsControl ItemsSource="{Binding ViewMgr.Views}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Title}"/> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
     <ItemsControl.ItemContainerStyle> 
      <Style TargetType="MenuItem"> 
       <Setter Property="Command" Value="{Binding DataContext.OpenWindowCmd , 
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"/> 
       <Setter Property="CommandParameter" Value="{Binding}"/> 
      </Style> 
     </ItemsControl.ItemContainerStyle> 
    </ItemsControl> 
</MenuItem> 

错误如何创建的菜单项的我在XAML菜单上使用的MVVM风格动态更新列表数据绑定和命令?

+1

你得到了什么样的错误?尝试获取详细的错误信息并发布,通常可以帮助找到解决方案 – har07

回答

1

要添加新的ItemsControl为菜单项的一个孩子,而不是增加每个视图菜单项目本身的一个孩子。您可能会遇到错误,因为样式TargetType不匹配。 MenuItem继承自ItemsControl本身并公开属性ItemsSource。请尝试以下操作:

<MenuItem ItemsSource="{Binding ViewMgr.Views}" DisplayMemberPath="Title"> 

    <MenuItem.ItemContainerStyle> 
     <Style TargetType="MenuItem"> 
      <Setter Property="Command" Value="{Binding DataContext.OpenWindowCmd, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"/> 
      <Setter Property="CommandParameter" Value="{Binding}"/> 
     </Style> 
    </MenuItem.ItemContainerStyle> 

</MenuItem> 
+0

感谢您的帮助,它的工作原理!我编辑了你的xaml并添加了头部以便清晰并修正了错误的Menu.ItemContainerStyle结束标记。 –

+0

完美,感谢编辑! – Marc

+0

好看起来没有接受@Marc编辑:X –

相关问题