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

时间:2011-07-13 14:49:25

标签: silverlight-4.0 mvvm caliburn.micro

我有一个公开几个命令属性的行为。通常我使用MVVM Light,并且只在我的视图模型中使用路由命令并绑定到那些。但是,这个项目正在使用Caliburn.Micro所以我正在尝试使用Caliburn.Micro方式。我可以在Message.Attach上使用一些语法来执行此操作(是否有关于Message.Attach的解析器的任何好文档)?

我是否必须修改行为以公开事件以使其与Caliburn.Micro一起使用?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

Caliburn.Micro为您处理路由操作,只要您正确设置View和ViewModel(它使用一些隐含的假设,这可能是也可能不是您的一杯茶)这是一个关于操作的链接:{{3 }}

做同样事情的更好,更不紧密耦合的方式是使用Event Aggrigator - http://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&referringTitle=Documentation

查看Caliburn.Micro源代码中可用的HelloEventAggrgator代码示例,以获取示例......但基本的jist是这样的:

您可以制作自定义事件以供聚合器使用。

public YourEvent
{
...
}

您的视图将发布这些自定义事件 - 它不关心谁在监听,只关注事件是否已发布。

public YourCodeBehind
{
    public Button_Clicked(...)
    {
        this.Events.Publish(new YourEvent());
        ...
    }
    ....
}

您的ViewModel将设置为通过添加IHandle

来处理这些事件
[Export(typeof(...))]    
public class YourViewModel : IShell, IHandle<YourEvent>
{
    [ImportingConstructor]
    public YourViewModel(IEventAggregator events)
    {
        events.Subscribe(this);
        ...
    }
    public Handle(YourEvent event)
    {
        ...
    }
    ...
{

这种方法通过允许View真正只处理对数据的绑定和发布事件来保持非常高的SoC - 视图仍然不关心如何处理事件。

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

答案 2 :(得分:-1)

我最终将行为重写为触发器而不是处理此问题。