Привязка события SelectionChanged в Silverlight + MVVM-Light - PullRequest
5 голосов
/ 29 мая 2010

Обработчик события «SelectionChanged» элемента управления ComboBox имеет следующую подпись:

void SelectionChangedMethod(object sender, SelectionChangedEventArgs e)

Как связать это свойство в Silverlight 4 и MVVM-Light с соответствующим методом объекта 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-Light не поддерживает 2 общих параметра ...

Есть ли какое-либо решение или обходной путь для этого случая? Как связать управляющее событие с методом с 2 параметрами?

И еще одна проблема: ComboBox не имеет свойства «Command» для привязки этой команды ..? Как я могу получить событие для ViewModel?

Спасибо.

P.S. Я пытался использовать свойство SelectedItem в выпадающем списке, но кажется, что реализация ComboBox не верна, и она не работает ...

1 Ответ

25 голосов
/ 29 мая 2010

Существует гораздо более простой подход, чем попытка подключить SelectedChangedEvent.

Try ...

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

...