如何使用Message.Attach调用另一个对象内的方法

时间:2014-10-23 17:16:23

标签: wpf caliburn.micro

我有一个视图模型,它将另一个类设置为其属性。另一个类包含ICommand的实现作为其属性。我想双击执行其中一个命令。

不幸的是,Caliburn.Micro引发了一个异常(“找不到方法Commands.Command.Execute的目标。”)。

我试图搜索网络并阅读文档,但没有任何成功。

如何正确地做到这一点?

注意:在实际应用程序中,消息可能附加到网格视图,该网格视图可能与包含命令类的视图模型具有不同的DataContext。

XAML:

<Window x:Class="WpfApplication8.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:cal="http://www.caliburnproject.org">
    <Grid>
        <TextBox 
            cal:Message.Attach="[Event MouseDoubleClick] 
               = [Action Commands.Command.Execute(null)]" />
    </Grid>
</Window>

代码隐藏类:

namespace WpfApplication8
{
    public partial class MainWindow
    {
        public Commands Commands { get; set; }

        public MainWindow()
        {
            this.Commands = 
                new Commands { Command = new Command { MainWindow = this } };

            this.InitializeComponent();

            this.DataContext = this;
        }
    }

    public class Commands
    {
        public Command Command { get; set; }
    }

    public class Command
    {
        public MainWindow MainWindow { get; set; }

        public void Execute(object parameter)
        {
            this.MainWindow.Title = "Executed";
        }
    }
}

1 个答案:

答案 0 :(得分:0)

正如@alik评论的那样,完整的解决方案是:

<Window x:Class="WpfApplication8.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:cal="http://www.caliburnproject.org">
    <Grid>
        <TextBox
            cal:Message.Attach="[Event MouseDoubleClick] = [Action Execute(null)]"
            cal:Action.TargetWithoutContext="{Binding Commands.Command}"/>
    </Grid>
</Window>