5

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

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;
    }
}

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

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

还有一个问题:ComboBox 没有“Command”属性来绑定这个命令..?如何获取 ViewModel 的事件?

谢谢。

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

4

1 回答 1

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");
        }
    }
}

可以按照您的方式进行

<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding MyCommand}" PassEventArgsToCommand="True"/>

命令应该是“SelectionChangedEventArgs”类型的 RelayCommand

于 2010-05-29T03:28:46.790 回答