【发布时间】:2012-07-01 03:54:18
【问题描述】:
我在shellview中有一个顶级菜单,选择子menuiuem时,我想在shellviewmodel上调用以下方法(指挥.Collective.Allactive)。
public void SelectServer(string pServerName)
{
mDefaultClaimServer = pServerName;
}
以下不起作用,因为没有调用任何方法(我尝试了各种签名和动作参数)-
<Menu Name="menu1" DockPanel.Dock="Top">
<MenuItem Header="Select Server" Name="ClaimServers">
<MenuItem.ItemTemplate>
<DataTemplate>
<!-- we need this else we show the class name -->
<TextBlock Text="{Binding DisplayName}">
<ContentControl cal:Message.Attach="[Event Click] = [Action TxTester.ShellViewModel.SelectServer($Text)]"/>
</TextBlock>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</Menu>
以下确实调用了 ShellViewModel SelectServer 方法,但是对于单击的子 MenuItem 的文本,我得到了 null(我还尝试了许多其他签名和操作参数)-
<Menu Name="menu1" DockPanel.Dock="Top">
<MenuItem Header="Select Server" Name="ClaimServers" cal:Message.Attach="SelectServer($this.Text)">
<MenuItem.ItemTemplate>
<DataTemplate>
<!-- we need this else we show the class name -->
<TextBlock Text="{Binding DisplayName}" />
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</Menu>
我已经为此苦苦挣扎了很长时间,但无法弄清楚。有人可以建议我可以将子 MenuItem 的标题文本传递给 ShellViewModel SelectServer 方法的正确组合吗?
【问题讨论】:
-
不会让 Menu 触发 SelectionChanged 或也不会绑定 SelectedItem 属性。
-
Derek - 我正在尝试通过使用 CM 机制(并尝试学习 CM)来避免与事件相关的代码。
-
当然可以,但是可以为此使用一个操作。
-
我可以很好地调用操作,但找不到传递给我 MenuItem 文本的参数(我尝试将 Text 作为参数,但我的操作被调用但参数为空)。我尝试了我能想到的。你知道哪个会做到吗?我在 CM 还是很新,只有下面的工作。可能只是做错了......