我正在尝试使用一组子项填充菜单项。这很容易,但是我需要添加一个始终存在的额外功能,它执行“添加”操作。我使用复合集合将其添加到需要显示的现有项目集合中。
这是代码:
<MenuItem Header="Time Ranges" x:Name="TimeRangesMenuItem"
Background="{StaticResource TitleBarButtonBackgroundBrush}"
Margin="2">
<MenuItem.Resources>
<CollectionViewSource Source="{Binding ElementName=TimeRangesMenuItem, Path=DataContext.TimeSpans}" x:Key="TimeSpanMenuItems" />
</MenuItem.Resources>
<MenuItem.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding Source={StaticResource TimeSpanMenuItems}}" />
<Separator />
<MenuItem Header="Add New" cal:Message.Attach="NewTimeSpan()" />
</CompositeCollection>
</MenuItem.ItemsSource>
<MenuItem.ItemTemplate>
<ItemContainerTemplate>
<MenuItem Header="{Binding Name}" cal:Message.Attach="ConfigureTimeSpan()" />
</ItemContainerTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
它几乎可以工作。我试图显示的 DataContext.TimeSpan ViewModel 是“嵌套”在两个 MenuItem 内,而不是仅仅填充一个,所以我得到了这种奇怪的行为(这只有一个 TimeSpanViewModel“时间跨度”:
鼠标在“内部”MenuItem 之外。请注意,如果您按下它,内部的功能会起作用:
普通菜单项:
有人对如何解决这个问题有任何想法吗?