Обработчик события "SelectionChanged" управления ComboBox имеет следующую подпись:
void SelectionChangedMethod(object sender, SelectionChangedEventArgs e)
Как связать с тем свойством под Silverlight 4 и MVVM-светом к соответствующему методу объекта ViewModel?
Насколько я знаю, я должен сделать что-то вроде этого:
public void Changed(Object obj, SelectionChangedEventArgs e)
{
// .... implement logic here
}
RelayCommand<Object, SelectionChangedEventArgs> _command;
public ICommand ObjectSelectionChanged
{
get
{
if (_command == null)
{
_command = new RelayCommand<Object, SelectionChangedEventArgs>(Changed);
}
return _command;
}
}
Проблема состоит в том, что класс RelayCommand в MVVM-легкой платформе не поддерживает 2 универсальных параметра...
Есть ли какое-либо решение или обходное решение для этого случая? Как связывают событие управления с методом с 2 параметрами?
И другая проблема: ComboBox не имеет свойства "Command" для привязки этой команды..? Как я могу получить событие к ViewModel?
Спасибо.
P.S. Я попытался использовать свойство SelectedItem поля комбинированного списка, но кажется, что реализация ComboBox не корректна, и оно не работает...
Есть гораздо более простой подход, чем попытка подключить SelectedChangedEvent.
Попробуйте...
<ComboBox ItemsSource={Binding Path=Names} SelectedItem={Binding Path=SelectedName, Mode=TwoWay}>
public class ViewModel : ViewModelBase
{
private string _selectedName;
public string SelectedName
{
get { return _selectedName; }
set
{
if (_selectedName == value) return;
_selectedName = value;
RaisePropertyChanged("SelectedName");
}
}
}
Можно сделать так, как вы собирались
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding MyCommand}" PassEventArgsToCommand="True"/>
Команда должна быть RelayCommand типа 'SelectionChangedEventArgs'