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

时间:2010-05-29 02:26:51

标签: .net wpf silverlight mvvm mvvm-light

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?

感谢。

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

1 个答案:

答案 0 :(得分: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"/>

Command应该是'SelectionChangedEventArgs'类型的RelayCommand