我在“gridview样式”中有2列的listview。我想知道如何得到我称之为上下文菜单的项目的第一列值(CM只有一个按钮,我想要处理值)?
这是XAML:
<ListView.Resources>
<ContextMenu x:Key="ContextMenu">
<MenuItem Header="Run test with parameters" x:Name="runTestWithParams" Click="runTestWithParams_Click" />
</ContextMenu>
</ListView.Resources>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="ContextMenu" Value="{StaticResource ContextMenu}"/>
</Style>
</ListView.ItemContainerStyle>
这里是contextMenu button handeler:
private void runTestWithParams_Click(object sender, RoutedEventArgs e)
{
string valueOfFirstColumn = // something like ItemThatWasClicked["ID"].ToString();
}
如果您有任何想法,请帮助我。
解决方案
有必要创建RightMouseUp事件的处理程序并从其发件人获取我需要的值, 因为Context_Menu_button_Click的发件人不包含有关它被点击的项目的信息,但包含有关ContextMenu的信息。 所以...我这样处理:
处理程序:
private void HandleMouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
ListViewItem selected = sender as ListViewItem;
String valueINeed = (selected.Content as TestIdentification).Id;
}
XAML:
<Style TargetType="ListViewItem">
<EventSetter Event="MouseRightButtonUp" Handler="HandleMouseRightButtonUp" />
</Style>
谢谢大家!
答案 0 :(得分:0)
另一个解决方案是处理ListView上的ContextMenuOpening event。从那里,您可以访问ContextMenuEventArgs.OriginalSource属性,以获取事件源自的元素。
答案 1 :(得分:0)
您的问题很常见...... ContextMenu
不是其他控件所在的主视觉树的一部分,因此默认情况下它没有正确的DataContext
。但是,您会很高兴听到解决这个问题相对简单。我通常使用Tag
属性将DataContext
传递给ContextMenu
:
<ListView.Resources>
<ContextMenu x:Key="ContextMenu" DataContext="{Binding PlacementTarget.Tag,
RelativeSource={RelativeSource Self}}">
<MenuItem Header="Run test with parameters" x:Name="runTestWithParams"
Click="runTestWithParams_Click" />
</ContextMenu>
</ListView.Resources>
<ListView.ItemTemplate>
<DataTemplate DataType="{x:Type YourNamespace:YourDataType}">
<Grid Tag="{Binding DataContext, RelativeSource={RelativeSource Self}}"
ContextMenu="{StaticResource ContextMenu}">
<!--Define what your data objects look like here or just use this-->
<TextBlock Text="{Binding}" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
现在,我之前没有这么做过,所以我们可能会有一些问题需要解决,但无论如何都要这样做。当用户单击MenuItem
时,您现在应该可以使用sender.DataContext
属性访问数据对象。让我知道它是怎么回事。