2014-12-11 2 views
5

Я использую только библиотеки MVVM Light (из пакета Nuget) в моем проекте Windows Phone 8, и я хочу использовать EventToCommand в ToggleSwitch. У меня есть эти строки кодов:Пространство имен WP8 MvvmLight отсутствует и EventToCommand не существует

<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 Тип «Команда: EventToCommand» не найден. Убедитесь, что вы не указали ссылку на сборку и что все ссылочные сборки были построены.

Ошибка 3 Тег 'EventToCommand' не существует в пространстве имен XML "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" 

Что случилось? Почему я получаю эту ошибку? Я пытался использовать Google, но я не мог найти решение.

ответ

5

Ссылка использовать, чтобы включить команду неправильно. Правильная ссылка

xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform" 

Там трюк, чтобы получить эту ссылку, не написав ни строчки кода.

После того как вы загрузили пакет Nvu MvvmLight, скомпилируйте проект и откройте свой файл xaml в Expression Blend.

Затем щелкните значок Активы на левой панели инструментов (внизу) и начните вводить «eventtocommand» (см. Рисунок ниже).

enter image description here

После того, как вы видите EventToCommand появляются в активы панели, перетащите его на верхней части ToggleSwitch. Это оно! Ссылка будет добавлена ​​в ваш xaml автоматически, а также фактический код команды.

+1

Спасибо, обновлена ​​версия mvvmlight, чтобы найти пространство имен, в котором было изменено событие EventToCommand. – f0x

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> 
+0

Я думаю, это для WP 8.1 правильно? Я разрабатываю для WP8 (проект Silverlight). –

+0

@LiborZapletal - да извините. это для winrt/wp8.1. – fex

Смежные вопросы