2010-02-17 11 views
5

के साथ Silverlight 3 में ऑब्जेक्ट में किए गए रोलबैक परिवर्तनों में कैसे करें मेरे पास सिल्वरलाइट 3 प्रोजेक्ट है। मेरे पास एक टेक्स्टबॉक्स है जो ऑब्जेक्ट से जुड़ा टूवे डेटा है। यदि उपयोगकर्ता टेक्स्टबॉक्स में किए गए परिवर्तनों को रद्द करना चाहता है, तो ऑब्जेक्ट पर बाध्य फ़ील्ड में किए गए परिवर्तनों को पूर्ववत करने का सबसे अच्छा तरीका क्या है?दोबारा बाध्यकारी

मुझे पता है कि ऑब्जेक्ट लोड होने पर मैं प्रारंभिक मान को सेप्टेर चर में संग्रहीत कर सकता हूं, लेकिन मैं सोच रहा था कि ऐसा करने का बेहतर तरीका है या नहीं?

धन्यवाद।

उत्तर

0

यदि आप मान सेट करते समय वापस रोल करना चाहते हैं, तो संपत्ति सेटर में अपवाद फेंक दें। यदि आपको सबमिट पर रोलबैक करने की आवश्यकता है, तो आपको सेटिंग्स को एक अलग वर्ग में स्टोर करना चाहिए और परमाणु सेटिंग और रोलबैक प्रदान करना चाहिए - सुनिश्चित करें कि आपकी प्रत्येक संपत्ति INotifyPropertyChanged का समर्थन करती है।

5

एमएसडीएन (here) पर IEditableObject का उदाहरण कार्यान्वयन इसे पूरा करने के लिए एक बहुत ही सरल तरीका दिखाता है। मुझे लगता है कि इस कार्यान्वयन एक छोटे से स्पष्ट है, लेकिन दूसरी ओर माइक्रोसॉफ्ट शायद उनकी परीक्षण किया:

public class MyObject : ViewModelBase, IEditableObject 
{ 
    private struct MyData 
    { 
     string Foo, 
     string Bar 
    }; 

    private MyData Saved = new MyData() 
    private MyData Current = Saved; 

    public string Foo 
    { 
     get { return Current.Foo; } 
     set 
     { 
     Current.Foo = value; 
     OnPropertyChanged("Foo"); 
     } 
    } 

    public string Bar 
    { 
     get { return Current.Bar; } 
     set 
     { 
     Current.Bar = value; 
     OnPropertyChanged("Bar"); 
     } 
    } 


    public void BeginEdit() 
    { 
     if (Current == Saved) 
     { 
     Current = new MyData(); 
     Current.Foo = Saved.Foo; 
     Current.Bar = Saved.Bar; 
     } 
    } 

    public void CancelEdit() 
    { 
     if (Current != Saved) 
     { 
     Current = Saved; 
     OnPropertyChanged("Foo"); 
     OnPropertyChanged("Bar"); 
     } 
    } 

    public void EndEdit() 
    { 
     if (Current != Saved) 
     { 
     Saved = Current; 
     } 
    } 
} 

इस पद्धति का उपयोग करना, Current हमेशा वस्तु की वर्तमान मूल्यों अपने संपादन राज्य है, जो संपत्ति accessors बनाता है पर ध्यान दिए बिना शामिल लागू करने में आसान; IEditableObject विधियों बस Current के आसपास स्विच करें।

संपत्तियों की एक बड़ी संख्या को लागू करना उचित रूप से आसान है; जब आप कोई नई संपत्ति जोड़ते हैं तो आपको बस BeginEdit और CancelEdit अपडेट करना सुनिश्चित करना होगा।

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