WP8 MvvmLight命名空间丢失,EventToCommand不存在

问题描述 投票:6回答:2

我仅在Windows Phone 8项目中使用MVVM Light库(来自Nuget包),并且我想在EventToCommand中使用ToggleSwitch。我有以下几行代码:

<toolkit:ToggleSwitch x:Name="LockSwitch"
        IsChecked="{Binding IsLock, Mode=TwoWay}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Toggled">
            <Command:EventToCommand 
                Command="{Binding DataContext.NavigateToArticleCommand, ElementName=LayoutRoot}"
                CommandParameter="{Binding}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</toolkit:ToggleSwitch>

问题是VS显示错误:

错误1名称空间中不存在名称“ EventToCommand” “ clr名称空间:GalaSoft.MvvmLight.Command; assembly = GalaSoft.MvvmLight.Extras.WP8”。

错误2找不到类型'Command:EventToCommand'。验证 您不会缺少程序集引用,并且所有引用 程序集已建立。

错误3 XML命名空间中不存在标签'EventToCommand' 'clr-namespace:GalaSoft.MvvmLight.Command; assembly = GalaSoft.MvvmLight.Extras.WP8'。

我在Styles.xaml文件中的上面几行,该文件为ResourceDictionaryToggleSwitchDataTemplate的一部分。我使用此行包括MvvmLight库:

xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP8"

怎么了?为什么会出现该错误?我试图使用Google,但找不到解决方案。

c# windows-phone-8 mvvm mvvm-light
2个回答
7
投票

您用于包含命令的引用是错误的。正确的参考是

xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform"

有个技巧可以在不编写任何代码的情况下获得此参考。

下载MvvmLight nuget程序包后,编译项目,然后在Expression Blend中打开xaml文件。

然后单击左侧工具栏上的Assets图标(底部的一个),然后开始键入“ eventtocommand”(请参见下图)。

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9NSTZYdi5wbmcifQ==” alt =“在此处输入图像描述”>

一旦看到EventToCommand出现在Assets面板中,请将其拖放到ToggleSwitch的顶部。而已!该引用将以及实际的命令代码自动添加到您的xaml中。


0
投票

为什么不使用Microsoft.Behaviors SDK? (引用,添加引用,扩展名,行为sdk)不确定,但我认为EventTrigger和mvvm light EventToCommand现在已被弃用(由于行为sdk)。

带有Behaviors.SDK的代码示例:

xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:core="using:Microsoft.Xaml.Interactions.Core"

<toolkit:ToggleSwitch x:Name="LockSwitch"
        IsChecked="{Binding IsLock, Mode=TwoWay}">
            <interactivity:Interaction.Behaviors>
                <core:EventTriggerBehavior EventName="Toggled">
                    <core:InvokeCommandAction Command="{Binding command}" CommandParameter="{Binding param}"/>
                </core:EventTriggerBehavior>
            </interactivity:Interaction.Behaviors>
</toolkit:ToggleSwitch>
© www.soinside.com 2019 - 2024. All rights reserved.