2010-06-17 5 views
8

У меня есть приложение WPF Microsoft Surface, и я использую MVVM-шаблон.WPF: привязка к командам в коде за

У меня есть несколько кнопок, которые создаются в коде позади, и я хотел бы, чтобы связать команды с ними, но я только знаю, как это работает в XAML

так:

<Custom:SurfaceButton Command="{Binding SaveReservationCommandBinding, Mode=OneWay}"/> 

Но я не может сделать это так, потому что мои кнопки не существуют в XAML, только в коде.

Итак, как бы привязка команды как это работает в коде?

ответ

15

Предполагая, что у вас есть по имени вашего SurfaceButton в «SurfaceButton1» и у вас есть доступ к экземпляру команды, вы можете использовать следующий код:

SurfaceButton1.Command = SaveReservationCommand; 
+1

+1 для правильного ответа. Также при необходимости можно использовать привязку в коде (http://msdn.microsoft.com/en-us/magazine/cc700358.aspx#id0190003) – Anvaka

+2

Благодарим за быстрый ответ. Не думал, что это было бы так просто;) – sofri

+0

Переплет может быть установлен в коде позади, но реализация НЕ должна быть, и этот код будет работать, только если это было. – David

3

Я взял код из ссылки разместил Анвака как шаблон. Я использую RadMenuItem Telerik, но вы можете использовать любой другой компонент, который выдает свойство Command.

item = new RadMenuItem(); 
item.Header = "Hide Column"; 
DependencyProperty commProp = RadMenuItem.CommandProperty; 
if (!BindingOperations.IsDataBound(item, commProp)) { 
    Binding binding = new Binding("HideColumnCommand"); 
    BindingOperations.SetBinding(item, commProp, binding); 
} 
//this is optional, i found easier to pass the direct ref of the parameter instead of another binding (it would be a binding to ElementName). 
item.CommandParameter = headerlCell.Column; 
menu.Items.Add(item); 

Надеется, что это помогает ... и если что-то не понятно, извините, это мой первый пост :)

12

Принятый ответ будет работать хорошо, если кнопка имеет доступ к командованию. Однако в MVVM они обычно сохраняются отдельно (кнопка в представлении и команда в представлении-модели). В XAML вы обычно используете привязку данных для ее подключения (например, пример в вопросе).

Моя программа дала мне ошибку, когда моя динамическая кнопка не могла найти команду (потому что она находилась в совершенно другом пространстве имен). Вот почему я решил это:

SurfaceButton.SetBinding (Button.CommandProperty, new Binding("SaveReservationCommand")); 
Смежные вопросы