为什么MvvmLight.Command _and_ MvvmLight.Extras.WP7都需要?

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:cmdxtrasxmlns:cmd.如果我只有一个或另一个,事情就不起作用了!

这看起来很笨拙,并没有与我认为别人的建议相提并论.为什么我需要两者?

LBu*_*ion 5

Extras程序集的存在是因为EventToCommand需要对System.Windows.Interactivity的引用,而ButtonBaseExtensions,RelayCommand,Messenger等不需要它.有些人不愿意添加对程序集的引用,如果他们可以避免它.因此对于那些不需要EventtoCommand的人来说,他们使用基本程序集,而其他想要整个程序的人可以添加额外的程序.

干杯,洛朗