दिलचस्प पोस्ट
मैं अप्रचलित / पदावनत के रूप में एक विधि को कैसे चिह्नित करूं? WPF छवि बाइट ऑरेकल संग्रहित प्रक्रिया से परिणाम प्राप्त करें एक फाइल के लिए एआरसी कैसे सक्षम करें बैकस्लैश पर जावा स्ट्रिंग कैसे विभाजित करें विंडोज में गिट सिमलिंक डीबग तर्कों के साथ JVM को शुरू किए बिना एक जावा एप्लिकेशन डिबग करें क्या है? = ऑपरेटर का मतलब है? jQuery के UI Resizable भी रीसाइज़ करें रिवर्स विंडोज़ बेट वैकल्पिक वैकल्पिक तर्क देता है सत्र कुकी नहीं भेज सकते – हेडर पहले ही भेजे गए हैं जनक संदर्भ में बाल संदर्भ में स्प्रिंग बीन घोषित करना प्रस्तुत करने के लिए फार्म ताज़ा पृष्ठ रोकें प्रोग्रामिंग कैसे WPF में एक बटन पर क्लिक करें? किसी पीडीएफ को कैसे आरक्षित / कच्चे या परिसंपत्ति फ़ोल्डर में संग्रहीत किया जाता है?

कस्टम सत्यापन विशेषता कैसे बनाएं?

मैं एक कस्टम सत्यापन विशेषता बनाना चाहता हूं, जिसमें मैं अपनी संपत्ति के मूल्य की तुलना मेरे मॉडल वर्ग के दूसरे प्रॉपर्टी के मूल्य से करना चाहता हूं। उदाहरण के लिए मेरे मॉडल वर्ग में है:

... public string SourceCity { get; set; } public string DestinationCity { get; set; } 

और मैं इसे इस तरह उपयोग करने के लिए एक कस्टम विशेषता बनाना चाहता हूं:

 [Custom("SourceCity", ErrorMessage = "the source and destination should not be equal")] public string DestinationCity { get; set; } //this wil lcompare SourceCity with DestinationCity 

मैं वहाँ कैसे आ सकता हूँ?

वेब के समाधान से एकत्रित समाधान "कस्टम सत्यापन विशेषता कैसे बनाएं?"

यहां बताया गया है कि आप अन्य संपत्ति मूल्य कैसे प्राप्त कर सकते हैं:

 public class CustomAttribute : ValidationAttribute { private readonly string _other; public CustomAttribute(string other) { _other = other; } protected override ValidationResult IsValid(object value, ValidationContext validationContext) { var property = validationContext.ObjectType.GetProperty(_other); if (property == null) { return new ValidationResult( string.Format("Unknown property: {0}", _other) ); } var otherValue = property.GetValue(validationContext.ObjectInstance, null); // at this stage you have "value" and "otherValue" pointing // to the value of the property on which this attribute // is applied and the value of the other property respectively // => you could do some checks if (!object.Equals(value, otherValue)) { // here we are verifying whether the 2 values are equal // but you could do any custom validation you like return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName)); } return null; } } 

कृपया मेरे उदाहरण के लिए नीचे देखें:

आदर्श श्रेणी के औजारों का उपयोग करें INotifyPropertyChanged

 public class ModelClass : INotifyPropertyChanged { private string destinationCity; public string SourceCity { get; set; } public ModelClass() { PropertyChanged += CustomAttribute.ThrowIfNotEquals; } [Custom("SourceCity", ErrorMessage = "the source and destination should not be equal")] public string DestinationCity { get { return this.destinationCity; } set { if (value != this.destinationCity) { this.destinationCity = value; NotifyPropertyChanged("DestinationCity"); } } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void NotifyPropertyChanged(string info) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(info)); } } } 

एट्रिब्यूट क्लास में इवेंट हेन्डलर भी शामिल है

 internal sealed class CustomAttribute : Attribute { public CustomAttribute(string propertyName) { PropertyName = propertyName; } public string PropertyName { get; set; } public string ErrorMessage { get; set; } public static void ThrowIfNotEquals(object obj, PropertyChangedEventArgs eventArgs) { Type type = obj.GetType(); var changedProperty = type.GetProperty(eventArgs.PropertyName); var attribute = (CustomAttribute)changedProperty .GetCustomAttributes(typeof(CustomAttribute), false) .FirstOrDefault(); var valueToCompare = type.GetProperty(attribute.PropertyName).GetValue(obj, null); if (!valueToCompare.Equals(changedProperty.GetValue(obj, null))) throw new Exception("the source and destination should not be equal"); } } 

प्रयोग

  var test = new ModelClass(); test.SourceCity = "1"; // Everything is ok test.DestinationCity = "1"; // throws exception test.DestinationCity ="2"; 

कोड को आसान बनाने के लिए मैंने एक सत्यापन को छोड़ने का फैसला किया।

ऐसा करने का सबसे अच्छा तरीका, IValidatableObject के माध्यम से है http://msdn.microsoft.com/en-us/data/gg193959.aspx देखें