2011-07-18 30 views
2

我有一个我想用子项填充的MenuItem。不过,我想让它保持它已经拥有的项目:WPF数据绑定:不要覆盖预先填充的值

<MenuItem Header="_Profiles"> 
    <MenuItem Header="_New Profile..." /> 
    <Separator /> 
    <!-- Databind here! --> 
</MenuItem> 

然而,当我尝试使用它消除了两个分项目,我宣布正常声明式数据绑定。

我确定必须有一种方法可以做到这一点,但我无法弄清楚,我不确定我的任何Google搜索都很好;谁能帮忙?

谢谢!

回答

2

一种方法是利用CompositeCollection

<MenuItem Header="_File"> 
    <MenuItem.ItemsSource> 
     <CompositeCollection> 
      <MenuItem Header="_New" /> 
      <Separator /> 
      <CollectionContainer Collection="{Binding MenuItems}" /> 
      <Separator /> 
      <MenuItem Header="E_xit" /> 
     </CompositeCollection> 
    </MenuItem.ItemsSource> 
</MenuItem> 
+0

这是完美的。我知道肯定有一些内置的方式。 – Rob

+0

不错。我不知道你可以这样做。不久之前,我可以节省一些时间。 – Josh

+0

@Rob和@Josh,当4.0框架出来时,我一定花了一个星期的时间才完成命名空间,但即使如此,我仍然几乎每周都会发现新的类。 – user7116

1

它会绑定MenuItem中集合中的所有项目,因此在集合加载/修改后保留项目的唯一方法是确保静态菜单项保留在集合中。

做到这一点的一种方法是保留两个ItemCollections,一个静态值和一个动态值。绑定到动态值。然后在显示菜单之前,合并这些集合。这样您就不必一直确保静态值作为绑定集合的前两个元素。