首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Caliburn micro的动态菜单

Caliburn micro的动态菜单
EN

Stack Overflow用户
提问于 2012-01-24 22:41:22
回答 2查看 4.5K关注 0票数 3

我在我的WPF项目中使用Caliburn micro。静态菜单很容易与Caliburn绑定

代码语言:javascript
复制
<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的。

编辑:忘记提到我已经解决了绑定部分,

代码语言:javascript
复制
public BindableCollection<PluginMenuViewModel> Plugins { get; set; }

但我不知道如何听模型中的点击

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-31 06:53:23

最好的方法是添加您自己的消息绑定器

代码语言:javascript
复制
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中使用它,如下所示

代码语言:javascript
复制
cal:Message.Attach="ShowSettings($originalsourcecontext)"
票数 8
EN

Stack Overflow用户

发布于 2012-01-26 00:42:27

(为我糟糕的英语道歉)

您可以使用以下语法在VM上调用特定的方法(在XAML上):

代码语言:javascript
复制
cal:Message.Attach="[Event SelectionChanged] = [Action ItemClick($this)]"

这将在VM上调用ItemClick方法,并将绑定项本身作为参数进行传递。如果这是一个带有execute方法的"PluginItem“(就像通常一样),那么您只需在该方法内部调用它:

代码语言:javascript
复制
    public void ItemClick(PluginItem item)
    {
        item.Execute();
    }

您可以在此处阅读有关操作的更多信息:http://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&referringTitle=Documentation

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8988705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档