我可以从WP7中的ContextMenu中删除MenuItem吗?

时间:2012-08-22 17:59:30

标签: windows-phone-7 data-binding listbox contextmenu windows-phone-7.1

我正在寻找一种方法 - 如果可能的话 - 从Windows Phone 7中的ContextMenu中删除一个MenuItem控件。

以下是我的XAML的简化版本:

<ListBox>
<ListBox.ItemTemplate>
    <DataTemplate>
        <StackPanel>
            [ -- Content -- ]
            <toolkit:ContextMenuService.ContextMenu>
                <toolkit:ContextMenu>
                    <toolkit:MenuItem Header="view attributes" Tag="ATTRIBUTES" Click="ViewSelectedResultAttributes" />
                    <toolkit:MenuItem Header="view groups" Tag="GROUPS" Click="ViewSelectedResultGroups" />
                    <toolkit:MenuItem Header="view webpage" Tag="ONLINE" Click="ViewWebPage" />
                </toolkit:ContextMenu>
            </toolkit:ContextMenuService.ContextMenu>
        </StackPanel>
    </DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

现在,并非绑定集合中的所有项目都有与之关联的网站,对于那些我希望删除带有 ONLINE 标签的MenuItem的项目( ie 最后一个MenuItem)。

但我无法找到实现这一目标的方法。

我还想过以编程方式添加ContextMenu和所有MenuItems,这样我就可以有条件地添加每个MenuItem,但我似乎找不到像OnItemDataBound或OnDataBinding,这样的事件。

任何人都可以帮助我吗?

更新:更具体一点,我不想从ListBox中每个绑定项上的ContextMenu中删除MenuItem,我只想删除特定的MenuItem 当绑定对象失败时,ListBox中的项目。

假设我的ListBox包含3个绑定项: ListItem_1, ListItem_2, ListItem_3

现在,假设绑定到ListItem_2的对象的一个​​属性为NULL;在这种情况下,ListItem_2应该删除其ContextMenu中的一个MenuItem控件,而ListItem_1和ListItem_3应该仍然具有此MenuItem。

什么是理想的事件,它允许我捕获每个项目,因为它被绑定,并暴露ContextMenu。 ListBox.Items集合只返回我指定为数据源的相同对象集合,而ListBoxItems的集合会更有用 - 这是否存在?

1 个答案:

答案 0 :(得分:2)

首先,为您的上下文菜单命名,以便能够从代码隐藏中轻松检索它:

<toolkit:ContextMenu x:Name="ContextMenu">

从那里,您可以使用this.ContextMenu.Items访问这些项目。所以只需删除不再需要的那些:

var item = this.ContextMenu.Items.OfType<MenuItem>().First(m => (string)m.Tag == "ONLINE");

this.ContextMenu.Items.Remove(item);