我在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中有上面的行,ResourceDictionary
而ToggleSwitch
是DataTemplate
的一部分。我使用这一行包括MvvmLight库:
xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP8"
怎么了?为什么我会收到错误?我试图使用谷歌,但我找不到解决方案。
答案 0 :(得分:6)
用于包含命令的引用是错误的。正确的参考是
xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform"
如果不编写一行代码,就可以获得此引用。
下载MvvmLight nuget软件包后,编译项目,然后在Expression Blend中打开xaml文件。
然后点击左侧工具栏(底部的)上的资产图标,然后输入&#34; eventtocommand&#34; (见下图)。
一旦您看到 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>