我仅在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文件中的上面几行,该文件为ResourceDictionary
,ToggleSwitch
是DataTemplate
的一部分。我使用此行包括MvvmLight库:
xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP8"
怎么了?为什么会出现该错误?我试图使用Google,但找不到解决方案。
您用于包含命令的引用是错误的。正确的参考是
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中。
为什么不使用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>