首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF ContextMenu

WPF ContextMenu
EN

Stack Overflow用户
提问于 2009-05-21 19:37:52
回答 2查看 8.8K关注 0票数 3

我在wpf应用程序中使用mvvm。我在一个列表视图中有一个ContextMenu,当我右键单击一个列表时,我想要一个上下文菜单来显示联系人列表。

下面的代码只是给了我一个没有内容的上下文菜单。有人能告诉我我哪里做错了吗?

代码语言:javascript
复制
<ListView Grid.Row="3"
            ItemsSource="{Binding Path=Phones}"
            SelectedItem="{Binding Phones.SelectedItem}"
            Height="100">
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="ContextMenu" Value="{StaticResource ContactMenu}"/>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Phone" DisplayMemberBinding="{Binding Path=PhoneNumber, StringFormat=(000) 000-0000}"/>
            <GridViewColumn Header="Type" DisplayMemberBinding="{Binding Path=PhoneType.Type}"/>
            <GridViewColumn Header="Contacts" DisplayMemberBinding="{Binding Path=Contacts.Count}"/>
            <GridViewColumn Header="Notes" DisplayMemberBinding="{Binding Path= Notes.Count}"/>
            <GridViewColumn Header="Priority" DisplayMemberBinding="{Binding Path=Priority}"/>
        </GridView>
    </ListView.View>
</ListView>


<UserControl.Resources>
    <Style TargetType="{x:Type ListViewItem}">
        <Setter Property="Background" Value="{Binding SourceType, Converter={StaticResource SourceGroupConverter}}"/>
    </Style>
    <ContextMenu x:Key="ContactMenu" ItemsSource="{Binding Contacts}" >
        <ContextMenu.ItemTemplate>
            <DataTemplate>
                <MenuItem Header="{Binding Path=FirstName}"/>
            </DataTemplate>
    </ContextMenu>
</UserControl.Resources>

更新:

我弄清楚了,我有一个专门的集合,它导致绑定路径不正确。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2009-05-21 20:14:25

上下文菜单不存在于页面的可视化树中,因此它不继承数据上下文。尝试直接在ContextMenu上设置DataContext。

票数 2
EN

Stack Overflow用户

发布于 2010-03-16 00:59:31

我错过了Jose的答案,他是如何绕过这个问题的,但我能够自己解决这个问题。

对我来说,将模型包装到一个带有访问器的视图模型类中很有帮助。

例如:

代码语言:javascript
复制
ObservableCollection<CtxItemViewModel> ctxItems = new ObservableCollection<CtxItemViewModel>();
CtxItem c = new CtxItem();
c.Name = "Hello World";
ctxItems.Add(new CtxItemViewModel(c));

在ViewModel内部:

代码语言:javascript
复制
public string Name {
   get { return _model.Name; }
   set { _model.Name = value; }
}

添加访问器可以帮助我进行绑定。希望这对其他人也有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/894727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档