一起使用DisplayMemberPath和ItemTemplate的方法?

时间:2014-01-20 14:10:52

标签: c# wpf xaml contextmenu itemtemplate

如下面的XAML所示,我有一个带有标签的ListView;并且该标签是ContextMenuContextMenu位于DataTemplate,资源位于ItemTemplate的{​​{1}}。其次,我有一个ListView属性链接到我的一个类中的方法。

DisplayMemberPath

我遇到的问题是, <ListView x:Name="TitleList" ItemsSource="{Binding Collections}" ItemTemplate="{DynamicResource Template}" BorderBrush="{x:Null}" DisplayMemberPath="Title"> <ListView.ItemContainerStyle> <Style> <Setter Property="FrameworkElement.Margin" Value="20,20,0,0"/> </Style> </ListView.ItemContainerStyle> <ListView.Resources> <DataTemplate x:Key="Template"> <Label Content="{Binding .}" Width="500" HorizontalAlignment="Left"> <Label.ContextMenu> <ContextMenu> <MenuItem Header="Add Question" Click="AddQuestion"/> <MenuItem Header="Edit Title"/> <MenuItem Header="Delete Title"/> <MenuItem Header="Reposition Title"/> </ContextMenu> </Label.ContextMenu> </Label> </DataTemplate> </ListView.Resources> </ListView> DisplayMemberPath不能同时成为我ItemTemplate的属性,但我需要两者。

还有另一种方法可以让ListView不使用ContextMenu,还是有其他解决方案?

修改

试图完成此操作并尝试更改这些内容:

ItemTemplate

这两个让我右键单击它会显示菜单,但字符串显示为<ListView x:Name="TitleList" ItemsSource="{Binding Collections}" ItemTemplate="{DynamicResource Template}" BorderBrush="{x:Null}" SelectedValuePath="Title"> <ListView x:Name="TitleList" ItemsSource="{Binding Collections}" ItemTemplate="{DynamicResource Template}" BorderBrush="{x:Null}" TextSearch.TextPath="Title">

2 个答案:

答案 0 :(得分:1)

删除DisplayMemberPath。您正在使用自定义模板来显示ListViewItem的方式。问题在于您的标签的内容绑定。将其更改为此(如果不起作用,则稍微修改一下):

Content="{Binding Title}"

另一个选项是,当您在绑定控件时未指定要显示的属性时,它使用ToString()结果。如果您没有覆盖它,它将显示完全限定的类名。所以你可以像这样重写ToString():

public override ToString()
{
   return Title;
}

第一种选择是最好的选择。

答案 1 :(得分:-1)

  

......我需要两个......

不,你没有

只需在DataTemplate中添加一个额外元素即可显示每个项目的Title