【问题标题】:I can't use ActionMessage from caliburn micro, how do I resolve it?我无法使用来自 caliburn micro 的 ActionMessage,我该如何解决?
【发布时间】: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”类型的项目。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 你不能只使用简写语法,即&lt;Button cal:Message.Attach="AbrirPDF($dataContext.CNPJ)" /&gt;,它会在点击时调用指定的方法吗?
  • 这样工作,我能够将值传递给参数,但只是使用 $ dataContext,我尝试了 $ dataContext.CNPJ 但绑定返回 null ..

标签: c# wpf mvvm caliburn.micro caliburn


【解决方案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,我发现将命名空间更改为以下解决了我的问题,并且我不必添加额外的 &lt;cal:Action.Target&gt; 标签

    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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      • 2020-04-23
      • 2020-10-21
      • 2022-07-11
      • 2020-02-29
      相关资源
      最近更新 更多