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实现不正确并且它不起作用...
答案 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