Я использую как winform, так и включаю wpf через ElementHost.

Как я могу вызвать WPF ICommand из события нажатия кнопки Winforms? Все это для меня в новинку, так что терпите меня, задавая подобные вопросы.

Мой текущий код

CarView car = (CarView) CarHost.Child;         
CarViewModel cvm = (CarViewModel) car.DataContext;
cvm.SaveCommand.Execute(null);

Таким образом, я смог вызвать SaveCommand, но я не получил никаких данных.

Заранее спасибо.

0
Calvin 22 Июн 2012 в 22:23
Когда у вас есть экземпляр ICommand, вы просто вызываете для него Execute или, если хотите, CanExecute, то Execute.
 – 
Adam Mills
22 Июн 2012 в 22:31
Миллс, я не слежу за тобой. Вы можете привести мне пример?
 – 
Calvin
22 Июн 2012 в 22:32
1
Почему бы просто не использовать свойство кнопки Command вместо использования события Click?
 – 
Rachel
22 Июн 2012 в 23:20
- потому что у меня нет команды вызова свойства для моей кнопки. Имейте в виду, что кнопка, которую я хочу вызвать в ICommand, не находится в файле xaml. Это просто обычная форма как обычная кнопка. Я снова использую elementhost, чтобы показать xaml.
 – 
Calvin
22 Июн 2012 в 23:27
Потому что он использует WinForms для этого раздела, но пытается получить доступ к ICommands из размещенного элемента управления WPF. Он упомянул об этом в ответе на мой ответ ниже.
 – 
Tim
22 Июн 2012 в 23:27

1 ответ

Лучший ответ

Я могу что-то здесь упустить. Обычно вы делаете что-то вроде:

<Button Command="{Binding MyCommand}" />

И затем, когда кто-то нажимает кнопку, вызывается метод MyCommand Execute.

Я полагаю, из кода, вы могли бы позвонить:

private void OnClick(object sender, RoutedEventArgs e)
{
    if (MyCommand.CanExecute(null))
        MyCommand.Execute(null);
}

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

2
Tim 22 Июн 2012 в 22:47
Я использую как winform, так и подключаю wpf через elementhost. Поступая так, я хочу вызвать icommand из события щелчка кода.
 – 
Calvin
22 Июн 2012 в 22:57
1
Хорошо, тогда вы захотите сделать то, что я показал в коде C #. Я передал значение null, потому что не предполагал никакого параметра, но вы также можете передать свой параметр.
 – 
Tim
22 Июн 2012 в 23:08