2010-05-29 22 views
5

ComboBox नियंत्रण के "SelectionChanged" घटना के हैंडलर में बाध्यकारी निम्नलिखित हस्ताक्षर हैं:SelectionChanged घटना सिल्वरलाइट + MVVM लाइट

void SelectionChangedMethod(object sender, SelectionChangedEventArgs e) 

कैसे सिल्वरलाइट 4 और MVVM लाइट के नीचे करने के लिए है कि संपत्ति के लिए बाध्य करने के लिए 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 लाइट ढांचे में RelayCommand वर्ग 2 सामान्य मापदंडों ... का समर्थन नहीं करता है

क्या इस मामले के लिए कोई समाधान या समाधान है? विधि 2 पैरामीटर के साथ विधि को कैसे बाध्य करें?

और एक और समस्या: कॉम्बोबॉक्स में इस कमांड को बांधने के लिए "कमांड" संपत्ति नहीं है ..? मैं ViewModel पर ईवेंट कैसे प्राप्त कर सकता हूं?

धन्यवाद।

पीएस मैंने combobox की SelectedItem प्रॉपर्टी का उपयोग करने का प्रयास किया है, लेकिन ऐसा लगता है जैसे कॉम्बोबॉक्स कार्यान्वयन सही नहीं है और यह काम नहीं करता है ...

उत्तर

25

चयनितChangedEvent को जोड़ने का प्रयास करने के बाद एक बहुत आसान तरीका है।

का प्रयास करें ...

<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"/> 

जा रहे थे कमान प्रकार का एक RelayCommand होना चाहिए करने के लिए संभव है 'SelectionChangedEventArgs'

+0

धन्यवाद, मोड = दोवे - यह कि मेरे लिए इसे व्यावहारिक बनाने के लिए आवश्यक था ... लेकिन दूसरा दृष्टिकोण क्या है? मैं इस "EventToCommand" का उपयोग कैसे कर सकता हूं? धन्यवाद। – Budda

+0

वाह, पहला दृष्टिकोण कमाल है! आपका बहुत बहुत धन्यवाद! –

संबंधित मुद्दे