2010-05-29 26 views
5

Việc xử lý của "SelectionChanged" sự kiện của điều khiển ComboBox có chữ ký sau đây:kiện SelectionChanged ràng buộc trong Silverlight + MVVM-Light

void SelectionChangedMethod(object sender, SelectionChangedEventArgs e) 

Làm thế nào để liên kết với tài sản đó dưới Silverlight 4 và MVVM-Light phương thức tương ứng của đối tượng ViewModel?

Theo như tôi biết, tôi cần phải làm một cái gì đó như thế này:

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

Vấn đề là RelayCommand lớp trong khuôn khổ MVVM-Light không hỗ trợ 2 thông số chung chung ...

Có giải pháp hay giải pháp nào cho trường hợp này không? Sự kiện kiểm soát ràng buộc với phương thức với 2 tham số như thế nào?

Và một vấn đề khác: ComboBox không có thuộc tính "Lệnh" để ràng buộc lệnh này ..? Làm thế nào tôi có thể nhận được sự kiện cho ViewModel?

Cảm ơn.

P.S. Tôi đã cố gắng sử dụng tài sản SelectedItem của combobox, nhưng có vẻ như việc thực hiện ComboBox không chính xác và nó không hoạt động ...

Trả lời

25

Có một cách tiếp cận dễ dàng hơn nhiều sau đó cố gắng kết nối SelectedChangedEvent.

Hãy thử ...

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

Có thể làm điều đó theo cách bạn sắp

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

Bộ chỉ huy phải là một RelayCommand của loại 'SelectionChangedEventArgs'

+0

Cảm ơn bạn, Mode = TwoWay - đó là những gì cần thiết cho tôi để làm cho nó khả thi ... Nhưng cách tiếp cận thứ hai là gì? Làm thế nào tôi có thể sử dụng "EventToCommand" này? Cảm ơn. – Budda

+0

Wow, cách tiếp cận đầu tiên thật tuyệt vời! Cảm ơn rất nhiều! –

Các vấn đề liên quan