2010-05-29 17 views
5

Handler z "SelectionChanged" wypadek kontroli ComboBox zdarzenie ma następujący podpis:SelectionChanged wiążące w Silverlight + MVVM-Light

void SelectionChangedMethod(object sender, SelectionChangedEventArgs e) 

Jak do wiązania tej nieruchomości pod Silverlight 4 i MVVM-Light do odpowiednia metoda obiektu ViewModel?

O ile wiem, muszę zrobić coś takiego:

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

Problemem jest to, że klasa RelayCommand w ramach MVVM-Light nie obsługuje 2 parametry ogólne ...

Czy istnieje jakieś rozwiązanie lub obejście tego przypadku? Jak zdarzenie kontroli wiązania do metody z 2 parametrami?

I kolejny problem: ComboBox nie ma właściwości "Command", aby powiązać to polecenie ..? Jak mogę dostać wydarzenie do ViewModel?

Dzięki.

P.S. Próbowałem użyć właściwości SelectedItem z combobox, ale wydaje się, że implementacja ComboBox nie jest poprawne i nie działa ...

Odpowiedz

25

Istnieje znacznie łatwiejsze podejście, a następnie próby połączenia SelectedChangedEvent.

Spróbuj ...

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

Możliwe jest zrobić to tak, jak jechaliśmy

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

polecenie powinno być RelayCommand typu 'SelectionChangedEventArgs'

+0

Dziękuję Mode = TwoWay - to, co było mi niezbędne, aby to działało ... Ale jakie jest drugie podejście? Jak mogę użyć tej "EventToCommand"? Dzięki. – Budda

+0

Wow, pierwsze podejście jest niesamowite! Wielkie dzięki! –