我在我的WPF项目中使用Caliburn micro。静态菜单很容易与Caliburn
绑定<Menu Grid.Row="0" IsMainMenu="True">
<MenuItem Header="_File">
<MenuItem x:Name="OpenScript" Header="_Open script"/>
</MenuItem>
<MenuItem Header="_Script">
<MenuItem x:Name="RunScript" Header="_Run script" />
<MenuItem x:Name="StopScript" Header="_Stop script" />
</MenuItem>
<MenuItem Header="S_ettings">
<MenuItem x:Name="Plugins" Header="_Plugins">...Clickable children here</MenuItem>
</MenuItem>
</Menu>
名称绑定到模型上的方法,但是对于上面看到的插件菜单,我们需要绑定PluginViewModel的集合。然后,当您单击插件时,我希望在菜单上触发Caliburn操作方法查看模型(你现在可以从那里获得IResults的结果)..这可能吗?
这个问题适用于这个开源项目 https://github.com/AndersMalmgren/FreePIE
编辑:忘了提到我已经解决了绑定部分,
public BindableCollection<PluginMenuViewModel> Plugins { get; set; }
但我不知道如何听取模特中的点击
答案 0 :(得分:8)
最好的方法是添加自己的邮件活页夹
MessageBinder.SpecialValues.Add("$originalsourcecontext", context => {
var args = context.EventArgs as RoutedEventArgs;
if(args == null) {
return null;
}
var fe = args.OriginalSource as FrameworkElement;
if(fe == null) {
return null;
}
return fe.DataContext;
});
然后你就可以像xaml一样使用它了
cal:Message.Attach="ShowSettings($originalsourcecontext)"
答案 1 :(得分:0)
(抱歉我的英语不好)
您可以使用语法(在XAML上)在VM上调用特定方法:
cal:Message.Attach="[Event SelectionChanged] = [Action ItemClick($this)]"
这将在VM上调用ItemClick
方法,将有界项本身作为参数传递。
如果这是一个带有执行方法的“PluginItem”(就像通常那样),那么在该方法中你只需要调用它:
public void ItemClick(PluginItem item)
{
item.Execute();
}
您可以在此处详细了解操作:http://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&referringTitle=Documentation