2011-04-28 17 views
8

मेरे पास एक व्यू, व्यूमोडेल और कस्टम टाइप क्लास के साथ एक साधारण परिदृश्य है।एमवीवीएम मॉडल देखने के लिए मॉडल संचार

मॉडल वर्ग की तरह कुछ है:

public class Person : Validation.DataError, INotifyPropertyChanged 
{ 
    #region INotifyProperty 

    public event PropertyChangedEventHandler PropertyChanged; 

    public void RaisePropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
    #endregion 


    public global::System.String name 
    { 
     get 
     { 
      return _name; 
     } 
     set 
     { 
      _name= value; 
      RaisePropertyChanged("name"); 
     } 
    } 
    private global::System.String _name; 

} ViewModel में

मैं एक व्यक्ति संपत्ति है:

private Model.Person person; 

     public Model.Person Person 
     { 
      get 
      { 
       return person; 
      } 
      set 
      { 
       this.person= value; 

       this.RaisePropertyChanged("Person"); 
       this.SavePersonCommand.OnCanExecuteChanged(); 
      } 
     } 

मेरे विचार में मैं एक पाठ बॉक्स है कि करने के लिए बाध्य कर रहा है Person.name

तो व्यूमोडेल से निष्पादित नहीं कर रहा है टी विधि क्योंकि व्यक्ति वस्तु अभी भी वही है ... यह मॉडल प्रॉपर्टी में सेट विधि को निष्पादित कर रही है।

मैं उपयोगकर्ता को व्यक्ति का नाम बदलने और किसी अन्य विधि (वेब ​​सेवा और अन्य सामग्री के माध्यम से खोज ...) पर कॉल करना चाहता हूं और मुझे लगता है कि यह कार्यक्षमता ViewModel में होनी चाहिए।

मैं विभिन्न व्यूमोडल्स और विचारों और दृश्यमानों के बीच संवाद करने के लिए एमवीवीएम लाइट टूलकिट से मैसेंजर का उपयोग कर रहा हूं।

अब मुझे नहीं पता कि मुझे इसके लिए मध्यस्थ का उपयोग करना चाहिए या अगर मुझे इसे हल करने का एक और तरीका पता होना चाहिए।

+0

ऐसा लगता है कि आप एक अच्छे पथ नीचे जा रहे हैं। मुझे लगता है कि आप प्रमाणीकरण/INotifyPropertyChanged और सामान कार्यान्वित कर रहे हैं। शायद आप Csla.Net को देखना चाहते हैं, जो आपके लिए यह सामान संभाल लेगा। यह एक ढांचा प्रदान करता है जिस पर महान मॉडल बनाने के लिए, साथ ही विभिन्न यूआई के समर्थन में कुछ मदद प्रदान करता है (मूल रूप से उनमें से सभी)। http://www.lhotka.net/cslanet/ – Andy

+0

आपके सुझाव के लिए धन्यवाद, मैं इसे देख लूंगा ;-) – zapico

उत्तर

14

बस अपने ViewModel में व्यक्ति का PropertyChanged घटना की सदस्यता और "नाम" संपत्ति के लिए जाँच, या जो भी आप करना चाहते हैं करते हैं:

Person.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(Person_PropertyChanged); 

void Person_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) 
{ 
    if(e.PropertyName == "Name") 
    { 
     //do something 
    } 
} 
+1

यह जाने का तरीका है। – Andy

+1

यह इतना आसान था !! आपकी मदद के लिए धन्यवाद :- डी – zapico

+1

मैं इस मुद्दे को देख रहा था और सोचा था कि मुझे व्यूमोडेल निर्भरता गुण देने के माध्यम से जाना था ताकि मैं व्यूमोडेल प्रॉपर्टी में व्यू में तत्व को बाध्य कर सकूं और फिर व्यूमोडेल प्रॉपर्टी को व्यू प्रॉपर्टी में जोड़ सकूं। वह एक बालों वाली गड़बड़ में बदल रहा था और अभी भी काम नहीं कर रहा था। आपका उत्तर बिना किसी परेशानी के जीयूआई में मॉडल परिवर्तनों को प्रसारित करने का एक बहुत ही आसान तरीका है। इस सीधे आगे जवाब के लिए धन्यवाद! –

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