Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 WPF: А где вы размещаете RoutedUICommand-ы?  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21990
Есть неразлучная пара VM+View.
Она может запускать какие-то команды, специфические именно для этой пары.
Где объявить эти команды?

Можно сделать в проекте какой-то общий класс Commands и туда все пихать.
Но это увеличивает связность кода, сложнее становится взять и потащить куда-то эту пару в другой проект или в библиотеку.

Можно делать отдельный класс под каждую модель - только ради команд - наплодить кучу дополнительных файлов.

Можно объявить команду в ViewModel, тогда она приобретает зависимость от System.Windows.Input, с другой стороны - IСommand тоже там определен.
22 мар 18, 12:01    [21276751]     Ответить | Цитировать Сообщить модератору
 Re: WPF: А где вы размещаете RoutedUICommand-ы?  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
Shocker.Pro,
Золотой пули нет.
Но есть утилиты которые строят новый проект по своим шаблонам для реализации MVVM.
Вот они строят папки:
/Commands
/Models
/ViewModels
/Views
...
IMHO
22 мар 18, 12:35    [21276934]     Ответить | Цитировать Сообщить модератору
 Re: WPF: А где вы размещаете RoutedUICommand-ы?  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 4042
View (представление) на увроне пользовательских файлов разметки не может не быть привязанным к VM.
Абстракция должно быть на уровне элементов управления и свойств зависимости. Создавая XAML файл\Шаблон данных, вы должны четко знать, для какой модели представления (тип контекста) вы его делайте.

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

Больше всего раздражает оборачивать всё это в команды и так далее, особенно когда делаешь какой то пример. Сейчас кстати в Avalonia можно делать связывание с делегатами и методами, вместо команд. При этом функциональность команд сохранили.

* RoutedCommand'ы удобно использовать, когда есть на панели кнопки взаимодействия с элементом управления, типа Copy\Paste\Undo\Redo, команды будут посылаться вверх по дереву и обрабатываться в тех элементах управления, которые из обработали. В TextBox свой Undo\Redo И другие команды, а у формы или другого элемента управления будут свои и обрабатываться они будут в порядке очереди (ToolBar и подобные элементы управления содержимым содержимого окна)
* Команды контекстного меню очень удобно заварачивать в маршрутизируемые команды и обрабатывать их централизовано в контроле делая универсальные менюшки, типа Expand All\Select All\Select children и так далее, есть уже предопределенные в приложении команды для многих контролов отлично работающих и там и в примере выше.
* Для взаимодейтсвия с элементами списочных контролов, контекст элемента списка это элемент коллекции и методов связанных с его удалением\созданием и других в нём естественно быть недолжно. Команды связанные с элементом управления удобно обрабатывать на уровне самого списочного контрола, а в качестве параметра передавать элемент коллекции
* Думаю есть полно других вариантов применения маршрутизируемых команд, включая локализацию языков, если не делать её в лоб
22 мар 18, 12:41    [21276972]     Ответить | Цитировать Сообщить модератору
 Re: WPF: А где вы размещаете RoutedUICommand-ы?  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21990
Роман, спасибо за развернутый ответ, просто ты ответил не на тот вопрос. ))
Как применять команды я уже определился, несколько сценариев есть.
Я имею ввиду - где ты размещаешь объявление
public static readonly RoutedUICommand LoadMoreCommand = new RoutedUICommand(....
22 мар 18, 13:03    [21277105]     Ответить | Цитировать Сообщить модератору
 Re: WPF: А где вы размещаете RoutedUICommand-ы?  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 4042
Shocker.Pro
Роман, спасибо за развернутый ответ, просто ты ответил не на тот вопрос. ))
Как применять команды я уже определился, несколько сценариев есть.
Я имею ввиду - где ты размещаешь объявление
public static readonly RoutedUICommand LoadMoreCommand = new RoutedUICommand(....

Если это команда элемента управления, то в элементе управления, если это какая то общая команда, типа Undo\Redo то если честно, то где попало :) обычно класс валяющийся на верхних уровнях пространств имен или даже пространства имен local.
Там же как правило, где валяются ститческие ключи для динамических ресурсов
22 мар 18, 13:46    [21277387]     Ответить | Цитировать Сообщить модератору
 Re: WPF: А где вы размещаете RoutedUICommand-ы?  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21990
Roman Mejtes
Если это команда элемента управления, то в элементе управления
а если это команда достаточно автономного куска программы, который именно не UserControl, а VM+DataTemplate?
22 мар 18, 13:59    [21277456]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить