2010-09-17 6 views
0

Я смотрю на следующий XAML:Silverlight Command Binding

<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> 

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

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

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

Полный код here:

класса

ответ

2

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

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

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

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

+0

Спасибо AnthonyWJones - вы правы насчет перемонтажа клика , но я до сих пор не понимаю, как можно разместить в середине части XAML объявления кнопки этот «my: ServiceButton.Command», который не является частью кнопки. – furd