Silverlight + MVVM-Light中的SelectionChanged事件绑定

Bud*_*dda 5 .net silverlight wpf mvvm mvvm-light

ComboBox控件的"SelectionChanged"事件的处理程序具有以下签名:

void SelectionChangedMethod(object sender, SelectionChangedEventArgs e)
Run Code Online (Sandbox Code Playgroud)

如何在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是MVVM-Light框架中的RelayCommand类不支持2个通用参数......

这种情况有什么解决方案或解决方法吗?如何使用2个参数将控制事件绑定到方法?

还有一个问题:ComboBox没有"Command"属性来绑定这个命令..?如何将事件发送到ViewModel?

谢谢.

PS我试图使用组合框的SelectedItem属性,但似乎ComboBox实现不正确,它不起作用...

Agi*_*ies 25

尝试连接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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

可以按照你的方式去做

<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding MyCommand}" PassEventArgsToCommand="True"/>
Run Code Online (Sandbox Code Playgroud)

Command应该是'SelectionChangedEventArgs'类型的RelayCommand