我有(注意Extras.WP7
):
<phone:PhoneApplicationPage
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP7"
>
...它对我的EventToCommand工作正常:
<phone:PhoneApplicationPage.Resources>
<i:EventTrigger x:Key="KeyPadButtonTrigger" EventName="Click">
<cmd:EventToCommand Command="{Binding Path=KeyPadButtonCommand}" CommandParameter="{Binding ElementName=Self, Path=Content }" />
</i:EventTrigger>
</phone:PhoneApplicationPage.Resources>
但后来我想像这样使用MmvmLight的ButtonBaseExtensions
:
<Button x:Name="button1"
cmd:ButtonBaseExtensions.Command="{Binding KeyPadButtonCommand}"
cmd:ButtonBaseExtensions.CommandParameter="{Binding ElementName=button1, Path=Content }"/>
...但是当我这样做时,我遇到了"The attachable property 'Command' was not found in type 'ButtonBaseExtensions'"
个错误。
我发现我必须为assembly=GalaSoft.MvvmLight.WP7
添加名称空间,如下所示:
<phone:PhoneApplicationPage
xmlns:cmdxtras="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP7"
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.WP7"
>
请注意,我有两个xmlns:cmdxtras
和xmlns:cmd
。如果我只有一个或那个,事情就不起作用了!
这看起来非常笨拙,并没有与我认为别人的建议相提并论。为什么我需要两者?
答案 0 :(得分:5)
Extras程序集的存在是因为EventToCommand需要对System.Windows.Interactivity的引用,而ButtonBaseExtensions,RelayCommand,Messenger等不需要它。有些人不愿意添加对程序集的引用,如果他们可以避免它。因此对于那些不需要EventtoCommand的人来说,他们使用基本程序集,而其他想要整个程序的人可以添加额外的程序。
干杯, 劳伦
答案 1 :(得分:1)
MvvmLight.Extras.WP7程序集提供了一个特定于WP7的程序集,其中包含“Extras”,即您可能想要或可能不想使用的那些内容,其中包括EventToCommand。 MvvmLight.WP7程序集是WP7特定的程序集,它提供核心功能,包括ButtonBaseExtensions。恰巧在您的场景中,两个类都位于相同的命名空间中,因为它们都与命令相关。遗憾的是,.NET Framework没有提供从两个不同程序集引用相同名称空间的机制,因此需要进行重复的xmlns定义。
从长远来看,可以在this MSDN article中描述的两个程序集中使用XmlnsDefinitionAttribute和XmlnsPrefixAttribute,它们允许相同的xmlns和前缀与两个程序集中的相同名称空间相关联,但这是一个决定对于Laurent来说,或者是为项目提供的贡献者:)