WP8中缺少MvvmLight命名空间且EventToCommand不存在。

6

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

<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-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP8”中不存在。

错误2:找不到类型“Command:EventToCommand”。请确认没有丢失程序集引用并且所有引用的程序集已构建。

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

这些代码行出现在文件Styles.xaml中,该文件是一个ResourceDictionary,ToggleSwitch是DataTemplate的一部分。我正在使用以下代码行包含MvvmLight库:
xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP8"

出了什么问题?为什么会出现错误?我试图使用谷歌搜索,但是没有找到解决办法。

2个回答

7
你使用的引用包含错误的命令。正确的引用是:
xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform"

有一个技巧可以在不写任何代码的情况下获取此引用。

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

然后单击左侧工具栏上的资源图标(底部),开始输入“eventtocommand”(参见下面的图片)。

enter image description here

一旦您看到EventToCommand出现在资源面板中,请将其拖放到您的 ToggleSwitch上。就这样!引用将自动添加到您的xaml中,实际命令代码也将被添加。


1
谢谢,我只是更新了mvvmlight版本,结果发现EventToCommand所在的命名空间已经改变了。 - cillierscharl

1
为什么不使用 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>

我猜这是为了WP 8.1对吧?我正在开发WP8(Silverlight项目)。 - Libor Zapletal
@LiborZapletal - 是的抱歉。它是针对winrt/wp8.1的。 - fex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接