2010-01-21 12 views
10

पर त्रुटियों के समान तरीके से चेतावनियां प्रदर्शित करना मैं किसी व्यवसाय ऑब्जेक्ट को सत्यापित करते समय चेतावनियां और त्रुटियां प्रदर्शित करना चाहता हूं और इन्हें उपयोगकर्ता को दृश्यमान रूप से प्रदर्शित करना है। इस प्रकारwpf नियंत्रण

interface IOrderItem : IDataErrorInfo 
{ 
    int ProductId { get; set; } 
    string ProductName { get; set; } 
    decimal Price { get; set; } 
    IDictionary<string, string> Warnings { get; } 
} 

यह यूआई के लिए बाध्य है:

<TextBox Text="{Binding Price, ValidatesOnDataErrors=True}/> 

कोई त्रुटि होगा:

    उदाहरण के लिए मैं एक व्यवसाय वस्तु वर्ग इतना की तरह एक अंतरफलक को लागू करने के लिए है

  • मूल्य < 0 => "कीमत 0 से कम नहीं हो सकती"

यह अच्छी तरह से काम करता है और टेक्स्टबॉक्स के चारों ओर एक लाल सीमा खींचता है जब मैं IDataErrorInfo इंटरफ़ेस का उपयोग कर व्यवसाय ऑब्जेक्ट पर त्रुटि संदेश डालता हूं।

मुझे क्या करना चाहते हैं यह भी उदाहरण के लिए, चेतावनी निर्दिष्ट है:

  • मूल्य < 15 || मूल्य> 30 => "सहिष्णुता के बाहर मूल्य"

ये चेतावनियां एक टेक्स्ट बॉक्स के चारों ओर एक नारंगी सीमा डालती हैं और उपयोगकर्ता को सूचित करती हैं कि कोई समस्या हो सकती है लेकिन उन्हें आगे बढ़ना बंद नहीं किया जाता है।

चेतावनियां स्ट्रिंग डिक्शनरी मैपिंग प्रॉपर्टीनाम => चेतावनी मैसेज में IDataErrorInfo के समान तरीके से संग्रहीत की जाती हैं।

प्रश्न: इस बारे में जाने का सबसे अच्छा तरीका क्या है?

  • स्पष्ट रूप से मुझे एक ऐसे स्टाइल की आवश्यकता होगी जिसमें टेक्स्ट बॉक्स के लिए नारंगी सीमा हो, लेकिन मैं इसे कैसे ट्रिगर करूं?
  • मैं वास्तव में प्रत्येक टेक्स्टबॉक्स के लिए एक अलग शैली नहीं चाहता हूं, तो शैली को उस नाम में प्राप्त करने के लिए अंतर्निहित बाध्यकारी कैसे पहुंच सकता है जिसे इसे शब्दकोश में देखना चाहिए।
+0

मैंने एक बहुत ही समान समस्या में भाग लिया है (http://stackoverflow.com/questions/3813365/mimicking- validation-behaviour-without- validation), इसलिए मैं यहां पर एक बक्षीस पोस्ट कर रहा हूं। – GWLlosa

उत्तर

2

आप इस http://www.codeproject.com/KB/WPF/wpfvalidation.aspx

संपादित की जाँच की है: कृपया नमूना यहाँ http://www.filefactory.com/file/b3b4cb7/n/ValidationErrorsSample.zip

HTH लगता है

+0

उस प्रोजेक्ट में स्थित त्रुटिप्रदाता, चेतावनियों से त्रुटियों को अलग करने के तरीकों के बजाय त्रुटियों को बढ़ाने के वैकल्पिक तरीकों के आसपास केंद्र में दिखता है। – GWLlosa

+0

आप सही हैं। यह दिखने से बड़ा रास्ता दिखता है। लेकिन, आप आवश्यक मूल्य के साथ अपवाद डेटा टैग करके इसे प्राप्त कर सकते हैं। –

+0

@GWLlosa मैंने अपनी पोस्ट अपडेट की है कृपया जांचें। –

0

यह करने के लिए एक अच्छा तरीका है कि एक पर datatriggers था एक कस्टम शैली है सत्यापन संपत्ति (संभवतया छोड़ने वाला वीएसएम और गेटोस्टेटेक्शन।

एक्सा अपनी परियोजनाओं में से एक से mple:

<i:Interaction.Triggers> 
    <ei:DataTrigger Binding="{Binding UnitData.TestState}" Value="Unknown"> 
     <ei:GoToStateAction StateName="UnknownState"/> 
    </ei:DataTrigger> 
    <ei:DataTrigger Binding="{Binding UnitData.TestState}" Value="Pass"> 
     <ei:GoToStateAction StateName="PassState"/> 
    </ei:DataTrigger> 
    <ei:DataTrigger Binding="{Binding UnitData.TestState, Mode=OneWay}" Value="Fail"> 
     <ei:GoToStateAction StateName="FailState"/> 
    </ei:DataTrigger> 
    <ei:DataTrigger Binding="{Binding UnitData.TestState, Mode=OneWay}" Value="Terminated"> 
     <ei:GoToStateAction StateName="FailState"/> 
    </ei:DataTrigger> 
    <ei:DataTrigger Binding="{Binding UnitData.TestState, Mode=OneWay}" Value="Warn"> 
    <ei:GoToStateAction StateName="WarnState"/> 
    </ei:DataTrigger> 
    <ei:DataTrigger Binding="{Binding UnitData.TestState}" Value="Indeterminate"> 
     <ei:GoToStateAction StateName="IndeterminateState"/> 
    </ei:DataTrigger> 
</i:Interaction.Triggers> 
+0

आप यहां यूनिटडाटा.स्टस्टेट पर बाध्यकारी हैं। मैं जिस विचार के बाद हूं, वह आपके बाध्यकारी को प्रभावशाली ढंग से पुन: उत्पन्न करने में सक्षम होना है, बिना संपत्ति के नाम (यूनिटडाटा.स्टस्टेट) को रनटाइम तक, बिना किसी मौजूदा तरीके से मौजूदा कॉलम के वर्तमान मूल्य बाध्यकारी का उपयोग कर। – GWLlosa

+0

आपको तत्व बाध्यकारी + पथ करने से रोक नहीं रहा है। – Firoso

+0

यह वही लगता है जो मैं प्राप्त करने की कोशिश कर रहा हूं; क्या आपके पास अपने बाध्यकारी का जिक्र करने के लिए वाक्यविन्यास का एक उदाहरण है? – GWLlosa

0

CSLA.Net एक नियंत्रण PropertyStatus कहा जाता है कि इस उद्देश्य के (त्रुटि, चेतावनी, या सूचना) के लिए प्रयोग किया जाता है, साथ ही अतिरिक्त कार्यक्षमता CSLA के बाकी से बंधा है। लेकिन आप कोड (ओपन सोर्स) को देख सकते हैं कि इसे कैसे संभाला जाता है।

ऐसा लगता है कि आप संपत्ति को निर्दिष्ट करने के लिए कनवर्टर पैरामीटर के साथ ऑब्जेक्ट (या चेतावनी शब्दकोश, लेकिन पूरे ऑब्जेक्ट के साथ आप IDataErrorInfo के माध्यम से त्रुटियों को संभाल सकते हैं) पर कनवर्टर का उपयोग कर सकते हैं। के लिए जाँचे। मुझे यकीन है कि आप तत्व बाध्यकारी वाक्यविन्यास या कुछ का उपयोग कर कुछ फैंसीपन के साथ इसे और सरल बना सकते हैं। कनवर्टर उस रंग को वापस कर देगा जिसे आप प्रदर्शित करना चाहते थे।

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