我在wpf应用程序中使用mvvm。我在一个列表视图中有一个ContextMenu,当我右键单击一个列表时,我想要一个上下文菜单来显示联系人列表。
下面的代码只是给了我一个没有内容的上下文菜单。有人能告诉我我哪里做错了吗?
<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>更新:
我弄清楚了,我有一个专门的集合,它导致绑定路径不正确。
谢谢。
发布于 2009-05-21 20:14:25
上下文菜单不存在于页面的可视化树中,因此它不继承数据上下文。尝试直接在ContextMenu上设置DataContext。
发布于 2010-03-16 00:59:31
我错过了Jose的答案,他是如何绕过这个问题的,但我能够自己解决这个问题。
对我来说,将模型包装到一个带有访问器的视图模型类中很有帮助。
例如:
ObservableCollection<CtxItemViewModel> ctxItems = new ObservableCollection<CtxItemViewModel>();
CtxItem c = new CtxItem();
c.Name = "Hello World";
ctxItems.Add(new CtxItemViewModel(c));在ViewModel内部:
public string Name {
get { return _model.Name; }
set { _model.Name = value; }
}添加访问器可以帮助我进行绑定。希望这对其他人也有帮助。
https://stackoverflow.com/questions/894727
复制相似问题