jon*_*nii 13 wpf contextmenu caliburn caliburn.micro
我正在尝试在ListBox ItemTemplate中获取上下文菜单以调用父视图模型上的方法,并将作为参数单击的项目传入.我有这个工作项目模板中的其他按钮,但对于上下文菜单,它似乎失败了.
我有以下xaml(缩写为清晰):
<ListBox>
<ListBox.GroupStyle>
<GroupStyle>
...
</GroupStyle>
</ListBox.GroupStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ContextMenu>
<ContextMenu Name="cm">
<MenuItem Header="Open"
cal:Message.Attach="Open($dataContext)">
</MenuItem>
</Grid.ContextMenu>
<TextBlock VerticalAlignment="Center" >
.. text..
</TextBlock>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,这与视觉树不同的事实有关,因此Caliburn无法可靠地解决方法.我确定这是一个常见问题,我尝试了一些我在网上发现的东西,但似乎没有任何效果.
有任何想法吗??
Jas*_*sey 25
使用我在Caliburn Micro网站上找到的信息,我将您的XAML修改为如下所示:
<Grid Background="White" HorizontalAlignment="Stretch" Height="200" Name="GridLayout">
<ListBox x:Name="ListBoxItems">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Tag="{Binding DataContext, ElementName=GridLayout}">
<Grid.ContextMenu>
<ContextMenu Name="cm" cal:Action.TargetWithoutContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}">
<MenuItem Header="Open"
cal:Message.Attach="Open($dataContext)">
</MenuItem>
</ContextMenu>
</Grid.ContextMenu>
<TextBlock VerticalAlignment="Center" >
.. text..
</TextBlock>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
Run Code Online (Sandbox Code Playgroud)
我的观点模型:
public List<string> ListBoxItems { get; set; }
public ShellViewModel()
{
ListBoxItems = new List<string> {"One", "Two", "Three"};
}
public void Open(object source)
{
MessageBox.Show((string) source);
}
Run Code Online (Sandbox Code Playgroud)
使用列表框中的相应字符串成功调用Open.
| 归档时间: |
|
| 查看次数: |
9181 次 |
| 最近记录: |