如下面的XAML所示,我有一个带有标签的ListView
;并且该标签是ContextMenu
。 ContextMenu
位于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">
。
答案 0 :(得分:1)
删除DisplayMemberPath。您正在使用自定义模板来显示ListViewItem的方式。问题在于您的标签的内容绑定。将其更改为此(如果不起作用,则稍微修改一下):
Content="{Binding Title}"
另一个选项是,当您在绑定控件时未指定要显示的属性时,它使用ToString()结果。如果您没有覆盖它,它将显示完全限定的类名。所以你可以像这样重写ToString():
public override ToString()
{
return Title;
}
第一种选择是最好的选择。
答案 1 :(得分:-1)
......我需要两个......
不,你没有
只需在DataTemplate
中添加一个额外元素即可显示每个项目的Title
。