Привязка команд Silverlight - PullRequest
       2

Привязка команд Silverlight

0 голосов
/ 17 сентября 2010

Я смотрю на следующее xaml:

   <Grid x:Name="LayoutRoot" Background="White">
        <Button Content="Say Hello..." VerticalAlignment="Center" 
                HorizontalAlignment="Center" 
                my:ButtonService.Command="{Binding Path=SayHello}"
                my:ButtonService.CommandParameter="Bob"/>
    </Grid>

Я хотел бы понять, как команда связывается без кода. [my:] указывает на dll, которая определяет статический класс [ ButtonService ], который в свою очередь определяет [ CommandProperty ] как DependencyProperty .

Я ожидал, что это будет частью кода, хотя на самом деле он находится в своем собственном классе - ButtonService.

Может кто-нибудь объяснить мне, как (и почему) это работает?

Полный код здесь :

1 Ответ

2 голосов
/ 17 сентября 2010

Класс ButtonService будет иметь особую форму свойства Dependency, называемую «AttachedProperty».Когда этому свойству присвоено значение, будет выполнен обратный вызов, определенный метаданными для этого свойства зависимости.

Это код этого обратного вызова в классе ButtonService, который выполнит всю проводку до нажатия кнопки.событие и событие CanExecuteChanged предоставленного значения ICommand.

Весь смысл этого шаблона «Команда» состоит в том, чтобы не помещать код в код позади.Код для выполнения некоторой обработки и определения того, когда такая обработка может быть выполнена, передается обратно в привязываемый объект данных (часто называемый «ViewModel»).Цель состоит в том, чтобы создать более тестируемый код, поскольку его гораздо проще тестировать без использования пользовательского интерфейса.

Обратите внимание, что если вы работаете с Silverlight 4, то Command и CommandParameter теперь реализуются Button поэтому в SL 4 эта услуга не требуется.

...