Почему MvvmLight.Command _and_ MvvmLight.Extras.WP7 оба необходимы? - PullRequest
0 голосов
/ 20 января 2011

у меня было (примечание 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's 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. Вещи не работают, если у меня есть только один или другой!

Это кажется очень неуклюжим и не совпадает с тем, что, как мне кажется, предлагают другие. Зачем мне оба?

Ответы [ 2 ]

5 голосов
/ 21 января 2011

Сборка Extras существует, потому что EventToCommand требует ссылку на System.Windows.Interactivity, тогда как ButtonBaseExtensions, RelayCommand, Messenger и т. Д. Не нужны. Некоторые люди не хотят добавлять ссылки на сборки, если они могут этого избежать. Таким образом, для тех, кому не нужен EventtoCommand, они используют только базовую сборку, а те, кому нужна вся программа, могут добавить дополнительные.

Ура, Laurent

1 голос
/ 20 января 2011

Сборка MvvmLight.Extras.WP7 предоставляет сборку, специфичную для WP7, которая содержит «дополнительные элементы», то есть те вещи, которые вы можете или не хотите использовать, включая EventToCommand.Сборка MvvmLight.WP7 - это сборка, специфичная для WP7, которая обеспечивает основные функциональные возможности, в том числе ButtonBaseExtensions.Так получилось, что в вашем сценарии оба класса находятся в одном и том же пространстве имен, поскольку оба они относятся к командам.К сожалению, .NET Framework не предоставляет механизм для ссылки на одно и то же пространство имен из двух разных сборок, следовательно, необходимо создать дублирующиеся определения xmlns.

В более долгосрочном плане можно будет использовать атрибут XmlnsDefinitionAttribute иАтрибут XmlnsPrefixAttribute в обеих сборках, как описано в этой статье MSDN , позволяющий связывать один и тот же xmlns и префикс с одним и тем же пространством имен в обеих сборках, но это решение должен принять Лоран или предоставить вкладчикук проекту:)

...