Я мало нового для привязки команды, поэтому для многих это может быть тривиальным вопросом. Я знаю, что мы можем добавлять привязки команд в xaml окна и предоставлять его свойство соответствия в viewmodel. Эта viewmodel будет предоставлена DataContext окна. Что-то вроде следующихдобавление пользовательского маршрутизируемого события пользовательского элемента управления в xaml окна в wpf
--app.xaml.cs
mainWindow.DataContext = viewModel;
- XAML
lt;Button Grid.Row="1" HorizontalAlignment="Right" Margin="0,3,18,3" Name="button1" Width="110" Command="{Binding LoadCommand}">_Load</Button>
- ViewModel
/// <summary> /// Gets the load command. /// </summary> /// <value>The load command.</value> public ICommand LoadCommand { get { if (m_LoadCommand == null) { m_LoadCommand = new RelayCommand(param => CanLoad(), param => Load()); } return m_LoadCommand; } }
Здесь RelayCommand класс, который реализует Интерфейс ICommand. CanLoad() и Load() - это методы, которые будут выполняться для выполнения canececute и выполнения команды relaycommand соответственно. Это событие нажатия кнопки, которая обрабатывается.
У меня есть пользовательский элемент управления, в котором зарегистрирован пользовательский routedevent, а пользовательский элемент управления используется в окне. В настоящее время я добавляю обработчик событий явно в код.
//hook up event listeners on the actual UserControl instance this.ucCustomEvent1.CustomClick += new RoutedEventHandler(ucCustomEvent_CustomClick); //hook up event listeners on the main window (Window1) this.AddHandler(UserControlThatCreatesEvent.CustomClickEvent, new RoutedEventHandler(ucCustomEvent_CustomClick));
Я не хочу, чтобы подключить RoutedEvent, явно в коде, но в XAML в Подобным же образом, как в примере кнопки. Я загрузил рабочий образец кода here для вашего прочтения.
HI Karmi ваш последний код работал. Я действительно задавался вопросом, что это такое: CommandBehavior, но позже я узнал, что это класс. Еще один вопрос: как передать отправителя и RoutedEventArgs в свойство MyViewModelCommand? – samar
Хммм ... это будет немного сложно и потребует некоторой настройки класса CommandBehavior в ссылке. Я бы сказал, что если вы используете шаблон MVVM, вероятно, не рекомендуется передавать отправителю и args в ViewModelCommand. Но в любом случае, чтобы это сделать, я подумал, что вам нужно будет изменить CommandBehavior и определить в нем еще одно вложенное свойство, например «CommandBehavior.PassEventInfo = true». – ASanch