Windows Phone 8.1 - MVVMLight - Почему не работает EventToCommad?

Я не могу использовать EventToCommand в моем приложении для Windows Phone 8.1.

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP8"

Я пробовал это также со сборкой =GalaSoft.MvvmLight.Extras.WP81...

<controls:PivotItem Name="pivotItem">
<i:Interaction.Triggers>
    <i:EventTrigger EventName="SelectionChanged">
        <cmd:EventToCommand Command="{Binding SelectServiceCommand}"
                            CommandParameter="{Binding SelectedIndex,                                 ElementName=pivotItem}"/>
    </i:EventTrigger>
    <!-- other stuff  -->
</i:Interaction.Triggers>

Я получаю следующие ошибки:

  • Член "Триггеры" не распознан или недоступен.
  • Неизвестный тип 'EventTrigger' в пространстве имен XML 'clr-namespace:System.Windows.Interactivity; Assembly=System.Windows.Interactivity'
  • Ошибка 2 Встраиваемое свойство "Триггеры" не найдено в типе "Взаимодействие"....

Может кто-то помочь мне, пожалуйста?

3 ответа

Решение

Вы нацелены на Silverlight или WinRT (универсальные приложения) для Windows Phone 8.1?

Если вы выбрали второй вариант, то в этом сообщении в блоге автор MVVM Light объясняет отсутствие поддержки EventToCommand - в основном в WinRT уже есть механизм, похожий на EventToCommand - Поведения.

Windows Phone 8.1

Windows 8.1 Behavior SDK: как использовать InvokeAction с InputConverter для передачи аргументов в Команду

Microsoft разработала собственную функциональность EventToCommand. Он находится в SDK Behaviors. Кто-то на stackru сказал, чтобы получить этот SDK через Nuget. Если вы не можете найти пакет в NuGet - получите его в Add reference dialog,

(Мой диалог "Добавить ссылку" может отличаться от оригинала из-за Productivity Power Tools расширение)

Вот пример простого использования:

<ListBox ItemsSource="{Binding Persons, Mode=OneWay}" 
         SelectedItem="{Binding SelectedPerson, Mode=TwoWay}">
    <interactivity:Interaction.Behaviors>
        <core:EventTriggerBehavior EventName="SelectionChanged">
            <core:InvokeCommandAction Command="{Binding DisplayPersonCommand}" />
        </core:EventTriggerBehavior>
    </interactivity:Interaction.Behaviors>
</ListBox>

При обновлении моего приложения WP8.0 для использования MVVMLight 5.0+ отключено поведение EventToCommand, мой поиск решения привел меня к этому сообщению в блоге, в котором содержался исходный код для реализации пользовательского командного действия, в котором в качестве параметра передавались бы аргументы событий. Реализация кода вернула мое приложение в рабочее состояние!!

Надеется, что это поможет вам:D

Другие вопросы по тегам