0

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

这个问题/答案显示了如何做到这一点

使用带有 caliburn 微 Message.Attach 的附加事件

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

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

任何人都知道为什么我看不到 ActionMessage?

例如

<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”,它似乎得到了正确解决,但当然在我想要的地方之外它不是很有用!

更新:

这是视图命名空间定义

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

我已经尝试过实际的程序集限定名称空间和其他组合,都存在相同的问题

4

2 回答 2

1

我以前从未使用过 ActionMessage 语法,但只要控件具有您尝试附加的事件,您是否尝试过以下语法:

<Button Content="Remove" cal:Message.Attach="[Event Click] = [Action Remove($dataContext)]" />

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

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

于 2012-09-11T02:38:51.150 回答
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>
于 2021-05-03T13:53:36.930 回答