एमएसडीएन (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
अपडेट करना सुनिश्चित करना होगा।
स्रोत
2010-02-17 20:27:06