Одной из основных проблем, с которыми я столкнулся в Silverlight, является отсутствие надежной поддержки командования (аля WPF). В частности, мне очень трудно применять шаблон MVVM аккуратно и с разумной инкапсуляцией из-за необходимости вручную вызывать RaiseCanExecuteChanged () для любого свойства, которое может повлиять на состояние команды.
В качестве примера, у меня есть родительский / дочерний вид, связанный с родительским / дочерним ViewModel. Родительский вид привязывается к команде родительского ViewModel. Родительское представление имеет несколько дочерних представлений, каждое из которых представляет собой пользовательский элемент управления, содержащий ряд встроенных элементов управления (текстовые поля, поля со списком и т. Д.), Которые связаны с моделью дочернего представления.
Состояние родительской команды (т.е. может ли она выполняться) основано на состоянии каждого из дочерних элементов управления. Например, все текстовые поля для всех дочерних элементов управления пользователя должны иметь допустимые значения. Для этого требуются свойства, которые эти элементы управления связывают с каждым вызовом RaiseCanExecuteChanged (), что означает, что они должны знать либо сам ICommand, либо делегата для вызова метода RaiseCanExecuteChanged ().
Внедрение команды или делегата мне кажется неправильным, особенно в ситуациях, более сложных, чем описано выше, например, когда имеется более 3 уровней элементов управления, и эти ссылки необходимо передавать по всей цепочке. Это также немного более удобно, так как каждый раз, когда создается экземпляр ребенка, необходимо выполнить дополнительный шаг добавления команды или делегата.
Все это стало бы намного проще, если бы Silverlight поддерживал функциональность CommandManager.RequerySuggested, как это делает WPF.
Я видел статьи, в которых предполагалось, что можно реализовать RequerySuggested в Silverlight ( одна такая статья ), но я вижу очень мало комментариев о том, надежна ли она и работает ли она адекватно.
Как другие обходили это ограничение в Silverlight?