我无法使用来自 caliburn micro 的 ActionMessage,我该如何解决?
Posted
技术标签:
【中文标题】我无法使用来自 caliburn micro 的 ActionMessage,我该如何解决?【英文标题】:I can't use ActionMessage from caliburn micro, how do I resolve it? 【发布时间】:2021-02-05 21:46:58 【问题描述】:根据我在 Caliburn Micro 的描述中读到的内容,这段代码应该可以毫无问题地编译。 Caliburn Description
<Button>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="AbrirPDF">
<cal:Parameter Value="Binding CNPJ"/>
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
尝试此操作时,我收到以下错误:
ArgumentException:无法将“ActionMessage”类型的实例添加到“TriggerActionCollection”类型的集合中。只允许使用“T”类型的项目。
有人可以帮我解决这个问题吗?
【问题讨论】:
你不能只使用简写语法,即<Button cal:Message.Attach="AbrirPDF($dataContext.CNPJ)" />
,它会在点击时调用指定的方法吗?
这样工作,我能够将值传递给参数,但只是使用 $ dataContext,我尝试了 $ dataContext.CNPJ 但绑定返回 null ..
【参考方案1】:
我有类似的问题,我必须在调用 ActionMessage
之前添加一个额外的 xaml 标记,我的相应示例才能使其工作:
<StackPanel>
<Button>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:Action.Target>
<cal:ActionMessage MethodName="AbrirPDF">
<cal:Parameter Value="Binding CNPJ"/>
</cal:ActionMessage>
</cal:Action.Target>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
然后我就可以访问指定的标签了。
【讨论】:
【参考方案2】:您可能有错误的命名空间映射。这应该编译:
<UserControl x:Class="CaliburnMicroSample.Views.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cal="http://www.caliburnproject.org">
<StackPanel>
<Button>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="AbrirPDF">
<cal:Parameter Value="Binding CNPJ"/>
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</UserControl>
唯一安装的 NuGet 包是Caliburn.Micro 3.2.0。
【讨论】:
非常好,我使用的是 4.0 版,当替换为 3.0 版时,如您的示例中编译的代码没有问题。【参考方案3】:对于 Caliburn.Micro v4,我发现将命名空间更改为以下解决了我的问题,并且我不必添加额外的 <cal:Action.Target>
标签
xmlns:cal="http://caliburnmicro.com"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
以前我一直在使用以下命名空间
xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
【讨论】:
以上是关于我无法使用来自 caliburn micro 的 ActionMessage,我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
来自用户控制的 Caliburn.Micro 导航对 ShellViewModel
使用 caliburn micro 和 fluent 验证通过按钮进行验证
如何使用 MVVM 和 Caliburn Micro 在多个 ViewModel 中使用模型中的数据