tig*_*tig 0 silverlight xaml windows-phone-7 mvvm-light
我有(注意Extras.WP7):
<phone:PhoneApplicationPage
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP7"
>
Run Code Online (Sandbox Code Playgroud)
...它对我的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>
Run Code Online (Sandbox Code Playgroud)
但后来我想用MmvmLight ButtonBaseExtensions这样:
<Button x:Name="button1"
cmd:ButtonBaseExtensions.Command="{Binding KeyPadButtonCommand}"
cmd:ButtonBaseExtensions.CommandParameter="{Binding ElementName=button1, Path=Content }"/>
Run Code Online (Sandbox Code Playgroud)
......但是当我这样做时,我得到了"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"
>
Run Code Online (Sandbox Code Playgroud)
请注意,我有两个xmlns:cmdxtras和xmlns:cmd.如果我只有一个或另一个,事情就不起作用了!
这看起来很笨拙,并没有与我认为别人的建议相提并论.为什么我需要两者?
Extras程序集的存在是因为EventToCommand需要对System.Windows.Interactivity的引用,而ButtonBaseExtensions,RelayCommand,Messenger等不需要它.有些人不愿意添加对程序集的引用,如果他们可以避免它.因此对于那些不需要EventtoCommand的人来说,他们使用基本程序集,而其他想要整个程序的人可以添加额外的程序.
干杯,洛朗