हमारे पास हमारे डोमेन मॉडल में बहुत से अपरिवर्तनीय मूल्य वस्तुएं हैं, इसका एक उदाहरण एक अक्षांश, रेखांश & ऊंचाई द्वारा परिभाषित एक स्थिति है।कोड को डुप्लिकेट किए बिना मैं WPF में अपरिवर्तनीय ऑब्जेक्ट्स को कैसे संपादित कर सकता हूं?
/// <remarks>When I grow up I want to be an F# record.</remarks>
public class Position
{
public double Latitude
{
get;
private set;
}
// snip
public Position(double latitude, double longitude, double height)
{
Latitude = latitude;
// snip
}
}
की स्थिति का संपादन अनुमति देने के लिए स्पष्ट तरीका एक ViewModel जो टिककर खेल और setters, साथ ही मान्य अपरिवर्तनीय स्थिति उदाहरण को निकालने के लिए एक ToPosition() विधि है निर्माण करना है। हालांकि यह समाधान ठीक रहेगा, इसके परिणामस्वरूप बहुत सारे डुप्लिकेट कोड होंगे, खासकर एक्सएएमएल।
प्रश्न में मूल्य वस्तुएं तीन से पांच गुणों के बीच होती हैं जो आमतौर पर एक्स, वाई, जेड & कुछ सहायक सामान के कुछ प्रकार होते हैं। यह देखते हुए, मैंने विभिन्न संभावनाओं को संभालने के लिए तीन व्यू मॉडेल बनाने पर विचार किया था, जहां प्रत्येक व्यू मॉडेल को प्रत्येक संपत्ति के मूल्य के साथ-साथ प्रत्येक लेबल (उदाहरण के लिए "अक्षांश") के प्रदर्शन के लिए गुणों का खुलासा करने की आवश्यकता होगी।
आगे बढ़ते हुए, ऐसा लगता है कि मैं इसे एक सामान्य व्यू मॉडेल में सरल बना सकता हूं जो एन गुणों से निपट सकता है और प्रतिबिंब का उपयोग करके सब कुछ हुक कर सकता है। संपत्ति ग्रिड की तरह कुछ, लेकिन अपरिवर्तनीय वस्तुओं के लिए। एक संपत्ति ग्रिड के साथ एक मुद्दा है कि मैं स्वरूप बदलने के लिए तो मैं इस तरह के रूप लेबल और बक्सें हो सकता है सक्षम होना चाहते हैं:
Latitude: [ 32 ] <- TextBox
Longitude: [ 115 ]
Height: [ 12 ]
या जैसे एक डेटा ग्रिड में रख:
Latitude | Longitude | Height
32 115 12
तो मेरा सवाल है:
क्या आप इस समस्या को हल करने के लिए एक शानदार तरीका सोच सकते हैं? क्या कोई पुस्तकालय है जो ऐसा कुछ करता है या कुछ इसी तरह के लेख?
मैं मुख्य रूप से तलाश कर रहा हूँ:
- कोड दोहराव कम से कम करने
- आसान नया मान वस्तु प्रकार
- संभव सत्यापन
यह एक अच्छा समाधान है, मैं पॉल को पसंद करता हूं क्योंकि कम बॉयलरप्लेट है। बेशक, आप वास्तव में शब्दकोश के लिए मैपिंग गुणों के प्रोग्रामर ओवरहेड को कम करने के लिए अपने समाधान में प्रतिबिंब का उपयोग कर सकते हैं। वास्तव में एक स्वीकार्य उत्तर नहीं है क्योंकि मैंने समस्या को हल किया है और मैंने मूल रूप से सवाल उठाने के बाद पॉल की प्रतिक्रिया 6 महीने या उससे भी ज्यादा नहीं देखी थी। यदि आप एक व्यावहारिक कोड स्निपेट पेश करना चाहते थे जो लोग बस उपयोग कर सकते हैं तो मैं इसे स्वीकृत उत्तर के रूप में चिह्नित करूंगा। –