【问题标题】:Dynamic menus with Caliburn micro带有 Caliburn micro 的动态菜单
【发布时间】:2017-09-14 00:41:18
【问题描述】:

我将 Caliburn micro 用于我的 WPF 项目。静态菜单很容易与 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; }

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

【问题讨论】:

    标签: wpf data-binding caliburn.micro menubar


    【解决方案1】:

    最好的方法是添加你自己的消息活页夹

    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)"
    

    【讨论】:

    • 抱歉,我应该在哪里添加 cal:Message.Attach="ShowSettings($originalsourcecontext)" ?它在&lt;MenuItem x:Name="Plugins" Header="_Plugins"&gt; 中吗?但如果是,那么“插件”菜单将是可点击的,我只希望它的子菜单是可点击的。
    【解决方案2】:

    (对不起我的英语不好)

    您可以使用以下语法(在您的 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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多