WPF использование пользовательского RoutedUICommands или простых обработчиков событий?

Попробуйте передать id вместо объекта, как следует

post :create, params: { user_id: user.id, movie_id: movie.id }

Я думаю, вам вообще не нужно передавать user или user_id, поскольку вы не используете его при создании действия. current_user при создании действия должен вернуть пользователя, в котором вы входите в блок before.

5
задан Andy Dent 20 February 2009 в 07:40
поделиться

4 ответа

Управляет их преимуществами и недостатками, необходимо выбрать на основе ситуации, я настоятельно рекомендую, чтобы Вы сделали тот выбор на основе случая, не выбирайте "the one true way" для всего проекта.

Для некоторых случаев разделение между отправителем и получателем и способностью отправить команды с помощью только XAML является большим преимуществом (для хорошего взгляда в качестве примера, как шаблон управления ScrollBar общается с управляющей логикой по http://msdn.microsoft.com/en-us/library/ms742173.aspx).

В других случаях команды могут повернуть то, что было бы 2 обработчиками событий строк в некоторых невозможных следовать за вовлечением чудовища, изменяющим 4 отдельных места в приложении (Как ViewModel должен закрыть форму?).

6
ответ дан 13 December 2019 в 05:43
поделиться

Единственная причина состоит в том, чтобы иметь, хорошо знают реестр команд. Средства, что события, вероятно, будут закрытыми методами и я чувствую, что они плотно связываются к коду окна. В то же время Команды дают способность сохранить реализацию (событие) и определение (Команда) отдельно, можно даже использовать другой класс (смотрите на ApplicationCommands).

Кроме того, когда я делаю свою работу WPF, я использую реализацию ICommand (Шаблон "команда"). Вся логика команды переходит к Выполнить методу. Это помогает мне сохранить разделение логики более структурированным способом без сверхсложности кода окна. При использовании этой опции можно создать команды на модели и поэтому связать их без шума. Смотреть.

Модель Create.

public class Model
{
  ICommand CloseMessagePopupCommand {get; set;}
}

Затем присвойте Контекст Данных

public MainWindow()
{

  this.DataContext = new Model();
}

И используйте follwing XAML код.

<Button 
    Command="{Binding CloseMessagePopupCommand}"
    Content="{StaticResource Misc.Ok}" />
3
ответ дан 13 December 2019 в 05:43
поделиться

Другие вариации на ICommand, кажется, популярный способ реализовать сложные структуры команды.

Brian Noyes в его статье о PRISM говорит

Направленные команды в WPF очень мощны и полезны, но у них есть некоторые недостатки при применении к составному приложению. Прежде всего, они полностью связаны с визуальным деревом - invoker должен быть частью визуального дерева, и привязка команды должна быть связана через визуальное дерево.... Второй недостаток - то, что они плотно связаны с деревом фокуса UI, и продолжает говорить о DelegateCommand и CompositeCommand, который включает CAL (Призма).

1
ответ дан 13 December 2019 в 05:43
поделиться

Я пытаюсь остаться верным шаблону "команда", к которому обращается Mike при разрабатывании приложений WPF, использовании комбинации подходов Andy № 3 и № 2.

Я могу думать о только одной оборотной стороне о командах, по моему мнению: только определенные действия определенных элементов UI вызывают команды. Один способ обойти это состоит в том, чтобы иметь Ваш вызов обработчика событий Выполнить метод на команде. Я думаю, что команды обеспечивают очень хороший способ инкапсулировать логику выполнения. Если Вы поддерживаете большую часть UI и реализуете его с помощью MVC/MVC/MVVM шаблона, это становится очень очевидным.

Я поощряю Вас смотреть на ряд Dan Crevier на шаблоне DataModel-View-ViewModel, в особенности раздел по Командам и Инкапсулирующим Командам. Даже если этот шаблон не удовлетворяет Ваши потребности, он дает замечательный обзор того, как можно инкапсулировать логику в отдельном классе.

2
ответ дан 13 December 2019 в 05:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: