无法在Caliburn.Micro中为ActionMessage使用长语法

时间:2012-09-08 11:32:43

标签: c# events mvvm caliburn.micro

我正在尝试为附加事件创建一个动作,我认为CM不支持开箱即用。

此问题/答案显示了如何执行此操作

using attached events with caliburn micro Message.Attach

但它需要使用long CM ActionMessage语法,但是,当我尝试这样做时,我得到一个'XML名称空间中不存在'ActionMessage',其中blah是CM命名空间。

所有示例都显示了这种语法;目前我只是将代码放入视图中,将DataContext转换为ViewModel类型并调用适当的方法(我不喜欢这种方法,因为它将视图耦合到VM并且它与其余的不一致应用程序)

任何人都有任何想法,为什么我看不到ActionMessage?

e.g。

<i:Interaction.Triggers> 
                <Helpers:RoutedEventTrigger RoutedEvent="Helpers:DataChanging.Changing"> 
                    <!-- this line throws the error -->
                    <cal:ActionMessage MethodName="SelectedDataChanged"> 
                        <cal:Parameter Value="$eventargs" /> 
                    </cal:ActionMessage> 
                </Helpers:RoutedEventTrigger> 
 </i:Interaction.Triggers> 

我正在使用SL5和CM的SL5组装,但没有快乐......

有趣的是,如果我尝试在其他地方使用'ActionMessage',它似乎可以正确解决,但当然它在我想要的地方之外并不是很有用!

更新

这是视图名称空间def

xmlns:cal="http://www.caliburnproject.org"

我已尝试过实际的程序集限定命名空间和其他组合,所有这些都有相同的问题

2 个答案:

答案 0 :(得分:1)

我之前从未使用过ActionMessage语法,但只要控件有一个您尝试附加的事件,您就尝试了以下语法:

&lt; Button Content =“Remove”cal:Message.Attach =“[Event Click] = [Action Remove($ dataContext)]”/&gt;

我已经能够在各种控件上使用它而没有任何问题。

http://devlicio.us/blogs/rob_eisenberg/archive/2010/07/17/caliburn-micro-soup-to-nuts-pt-3-all-about-actions.aspx

答案 1 :(得分:0)

我遇到了类似的问题,我必须在调用 ActionMessage 之前添加一个额外的 xaml 标记,我的相应示例才能使其工作:

<i:Interaction.Triggers> 
    <Helpers:RoutedEventTrigger RoutedEvent="Helpers:DataChanging.Changing">
        <cal:Action.Target>
            <cal:ActionMessage MethodName="SelectedDataChanged">
                <cal:Parameter Value="$eventargs"/>
            </cal:ActionMessage>
        </cal:Action.Target>
    </Helpers:RoutedEventTrigger RoutedEvent="Helpers:DataChanging.Changing">
</i:Interaction.Triggers>