Silverlight 4.0 如何使用caliburn.micro绑定到命令属性?

Silverlight 4.0 如何使用caliburn.micro绑定到命令属性?,silverlight-4.0,mvvm,caliburn.micro,Silverlight 4.0,Mvvm,Caliburn.micro,我的行为公开了几个命令属性。通常我使用MVVM Light,在视图模型中只使用routed命令并绑定到这些命令。然而,这个项目使用的是Caliburn.Micro,所以我试着用Caliburn.Micro的方式。是否有一些语法可以用于Message.Attach(是否有关于Message.Attach解析器的好文档) 我是否必须修改行为以公开事件才能使Caliburn.Micro起作用?Caliburn.Micro有自己的视图/视图模型通信机制,作为命令调用的替代方案。您应该能够将Action参

我的行为公开了几个命令属性。通常我使用MVVM Light,在视图模型中只使用routed命令并绑定到这些命令。然而,这个项目使用的是Caliburn.Micro,所以我试着用Caliburn.Micro的方式。是否有一些语法可以用于Message.Attach(是否有关于Message.Attach解析器的好文档)


我是否必须修改行为以公开事件才能使Caliburn.Micro起作用?

Caliburn.Micro有自己的视图/视图模型通信机制,作为命令调用的替代方案。您应该能够将Action参数设置为现有命令的
Execute
委托,如果需要,可以设置适当的视图控件属性(例如
IsEnabled
)以绑定到
CanExecute
委托。

我最终将该行为重写为触发器来处理此问题

Caliburn.Micro为您的用户处理路由操作,只要您正确设置视图和ViewModel(它使用一些隐含的假设,这可能是您喜欢的,也可能不是您喜欢的)。以下是有关操作的链接:

做同样事情的一种更好的、不那么紧密耦合的方法是使用事件聚合器-

以Caliburn.Micro源代码中的HelloEventAgrGator代码示例为例。。。但基本的jist是:

您可以创建自定义事件以供聚合器使用

public YourEvent
{
...
}
您的视图将发布这些自定义事件—它不关心谁在侦听,只关心事件是否已发布

public YourCodeBehind
{
    public Button_Clicked(...)
    {
        this.Events.Publish(new YourEvent());
        ...
    }
    ....
}
通过添加IHandle,您的ViewModels将被设置为处理这些事件

[Export(typeof(...))]    
public class YourViewModel : IShell, IHandle<YourEvent>
{
    [ImportingConstructor]
    public YourViewModel(IEventAggregator events)
    {
        events.Subscribe(this);
        ...
    }
    public Handle(YourEvent event)
    {
        ...
    }
    ...
{
[导出(typeof(…)]
公共类YourViewModel:IShell,IHandle
{
[导入构造函数]
公共YourViewModel(IEventAggregator事件)
{
活动。订阅(本);
...
}
公共句柄(YourEvent事件)
{
...
}
...
{
这种方法通过允许视图真正只处理数据绑定和发布事件来维持非常高的SoC——视图仍然不关心事件是如何处理的


然后通过添加IHandle接口设置每个视图模型以处理事件。(请注意,在单个视图模型上可以有许多不同的IHandle接口)ViewModel不关心事件是如何引发的,只关心它是如何引发的,它是聚合器处理该事件的权威。

这里有一个指向devdigital提到的操作的链接,好吧,你的第一句话让我很困惑,我以为你是在将代码移植到Caliburn.Micro。在这种情况下,只要阅读操作文章,你就知道了“我会发现大部分工作都是通过约定为您完成的。例如,调用“发送”按钮,在单击视图模型时将调用该按钮上的发送方法。我正在尝试使用另一个项目中的行为。我希望使用相同的行为,但采用Caliburn Micro的方式,显然根本不使用命令。因此我重写了作为触发器的行为,因为这更容易。我不确定这与我问的问题有什么关系。我正在尝试将命令属性绑定到行为上。我没有任何事件,也不打算制作自定义事件来处理此问题。您的部分任务问到如何使用“Caliburn.Micro”方法这就是我给出的答案。很抱歉,您没有发现它的用处。嘿,以太龙。我喜欢使用事件聚合器的想法,但我对您响应中的代码有点困惑。在按钮单击处理程序中,您有“this.Events.Publish(new YourEvent());”。我的问题是,如何让视图的代码隐藏以了解事件聚合器?使用协同程序实现该行为。如果有机会,请在此答案中发布一些示例代码,以便我们可以在项目中参考它?我不认为这里真的有什么可共享的。我使用了触发器,而不是使用行为。
public YourEvent
{
...
}