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

时间:2014-12-11 18:44:57

标签: c# windows-phone-8 mvvm mvvm-light

我在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;装配= GalaSoft.MvvmLight.Extras.WP8”。

     

错误2找不到类型'Command:EventToCommand'。验证   你没有错过一个程序集引用和所有引用   组装已经建成。

     

错误3 XML名称空间中不存在标记'EventToCommand'   'CLR-名称空间:GalaSoft.MvvmLight.Command;装配= GalaSoft.MvvmLight.Extras.WP8'。

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

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

怎么了?为什么我会收到错误?我试图使用谷歌,但我找不到解决方案。

2 个答案:

答案 0 :(得分:6)

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

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

如果不编写一行代码,就可以获得此引用。

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

然后点击左侧工具栏(底部的)上的资产图标,然后输入&#34; eventtocommand&#34; (见下图)。

enter image description here

一旦您看到 EventToCommand 出现在资产面板中,请将其拖放到ToggleSwitch之上。那就是它!该引用将自动添加到您的xaml中以及实际的命令代码。

答案 1 :(得分: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>