我在我的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动作方法(你现在可以生成reuturn IResults的那种)。这个是可能的吗?
这个问题是针对这个开源项目https://github.com/AndersMalmgren/FreePIE的。
编辑:忘记提到我已经解决了绑定部分,
public BindableCollection<PluginMenuViewModel> Plugins { get; set; }但我不知道如何听模型中的点击
发布于 2012-01-31 06:53:23
最好的方法是添加您自己的消息绑定器
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)"发布于 2012-01-26 00:42:27
(为我糟糕的英语道歉)
您可以使用以下语法在VM上调用特定的方法(在XAML上):
cal:Message.Attach="[Event SelectionChanged] = [Action ItemClick($this)]"这将在VM上调用ItemClick方法,并将绑定项本身作为参数进行传递。如果这是一个带有execute方法的"PluginItem“(就像通常一样),那么您只需在该方法内部调用它:
public void ItemClick(PluginItem item)
{
item.Execute();
}您可以在此处阅读有关操作的更多信息:http://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&referringTitle=Documentation
https://stackoverflow.com/questions/8988705
复制相似问题