2012-06-22 18 views
8

मैं सोच रहा था कि converters का उपयोग कब करें और triggers का उपयोग कब करें। मैं जीयूआई पर संचालन के लिए एक ट्रिगर्स का उपयोग करना पसंद करता हूं (जैसे नियंत्रण/छुपा नियंत्रण, उनकी उपस्थिति आदि को बदलना आदि)।क्या मुझे WPF कनवर्टर या ट्रिगर का उपयोग करना चाहिए?

कुछ समय पहले मैं इस उद्देश्य के लिए एक BooleanToVisibilityConverter थे, लेकिन अब, मैं सिर्फ यह है, मैं एक ट्रिगर का उपयोग कर visibility से जुड़े सभी चीजें हैं और मैं भी शुरू कर दिया "सोचने के लिए बनाने के उद्देश्य था क्या की जरूरत नहीं है एमएस टीम द्वारा BooleanToVisibilityConverter? "। आम तौर पर, जब यह संभव हो तो मैं कोड लिखने के लिए एक घोषणात्मक तरीके का उपयोग करने का प्रयास करता हूं - इस उदाहरण में - एक्सएएमएल।

आपकी राय क्या है?

+0

ट्रिगर का उपयोग सिंगल वैल्यू चेक के लिए किया जाता है जहां कनवर्टर जटिल और भिन्न प्रकार के मूल्य रूपांतरण के लिए उपयोग किया जाता है। – JSJ

+0

कन्वर्टर्स की प्रदर्शन लागत की ओर इशारा करते हुए एक ही सवाल - http://stackoverflow.com/questions/5508159/datatrigger-vs-databinding-with-converter-performance-wise – akjoshi

उत्तर

13

मैं आपसे सहमत हूँ, मैं भी XAML में कथात्मक कोड का उपयोग करें और Triggers बजाय Converters पसंद करते हैं की कोशिश करो।

अधिकांश परिदृश्यों में ट्रिगर किसी भी कनवर्टर के समान काम कर सकते हैं लेकिन Converters में पचाजर के रूप में कस्टम/व्यावसायिक तर्क हो सकता है।

Triggers की एक सीमा आपके DataTriggers में सेटर्स केवल आपके यूआई तत्वों के गुणों को बदल सकते हैं; इसलिए, आप ट्रिगर्स के साथ अपनी व्यूमोडल्स प्रॉपर्टी को अपडेट नहीं कर सकते हैं, जहां Converters जीत है, ConvertBack विधि याद रखें।

तो, आप एक नियंत्रण VisibilityBooleanToVisibilityConverter और उपयोग करने के साथ अपने वीएम संपत्ति बाध्य कर सकते हैं, भले ही आपके नियंत्रण visibility कुछ अन्य मतलब है कि आपका वीएम संपत्ति अपडेट कर दिया जाएगा द्वारा बदल दिया गया है; आम तौर पर इसकी आवश्यकता नहीं होती है इसलिए BooleanToVisibilityConverter ट्रिगर्स द्वारा प्रतिस्थापित किया जाता है।

तो संक्षेप में

-

Triggers केवल OneWay कार्रवाई कर सकते हैं, जबकि ConvertersTwoWay संचालन

+1

यह * मजाकिया * यह जवाब लगभग बिल्कुल वैसा ही है [ यह अन्य] (http://stackoverflow.com/a/19474466/540776) – superjos

+0

@superjos मैं कहूंगा कि 'दूसरा जवाब लगभग इस तरह जैसा ही है': डी धन्यवाद, इसे इंगित करने के लिए धन्यवाद, मुझे मुस्कुराया :) – akjoshi

+1

हां, इस विषय पर बने रहने के लिए, मैंने बस यहां और वहां मेरी टिप्पणी कॉपी की है :) – superjos

1

आप या तो ट्रिगर या कनवर्टर द्वारा लेकिन संभावना नीचे मेरी विकल्प से कार्यक्षमता प्राप्त कर सकते हैं आप विकास के लिए TDD दृष्टिकोण का उपयोग कर रहे हैं तो कन्वर्टर्स के रूप में आप परीक्षण मामलों में लिख सकते हैं के लिए जाना है, जबकि निर्णय

  1. लेने माना जा सकता है ।
  2. यदि कनवर्टर में सही कोड के लिए कोई व्यावसायिक तर्क बेहतर है और कभी-कभी ट्रिगर के माध्यम से हासिल नहीं किया जा सकता है।
1

क्या कहा गया है इसके बाद के संस्करण मैं केवल जोड़ सकते हैं के अलावा प्रदर्शन कर सकते हैं:

  • कभी-कभी ट्रिगर को आवश्यकता होती है डुप्लिकेट चीजें, उदा। जब आपके पास ट्रिगर्स के लिए एक से अधिक संपत्ति होती है तो आपको प्रत्येक संयोजन को प्रत्येक संयोजन को निर्दिष्ट करने की आवश्यकता होती है
  • कभी-कभी आपको टाइप ए से बी में ठीक से परिवर्तित करने के लिए कोड की आवश्यकता होगी, फिर आपको कनवर्टर्स का उपयोग करना होगा। ट्रिगर अच्छे होते हैं यदि मूल्य/संपत्ति पहले ही वीएम से उजागर हो चुकी है, ताकि आप इसे ट्रिगर्स के लिए उपयोग कर सकें।
2

मेरी राय में, आप नीचे-नीचे से देख रहे हैं और आपको बस ऊपर-नीचे देखने की आवश्यकता है।

ट्रिगर -मुझे एक निर्दिष्ट शर्त पूरी हो जाती है यह "से चलाता है" एक निष्पादन दो असंगत प्रकार के बीच

कन्वर्टर्स -Convert।

जब हम इंटरजेर्स के साथ समान कार्यक्षमता कर सकते हैं तो हमें बूलियन डेटाटाइप की आवश्यकता क्यों होती है?

0

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

+0

डीडा आप मेरा प्रश्न देखते हैं? मैंने स्पष्ट रूप से लिखा था: "संचालन के लिए (जैसे नियंत्रण/छिपाने के नियंत्रण, उनकी उपस्थिति को बदलना आदि)"। मुझे पता है कि व्यवसाय से संबंधित विकल्पों को DomainModel ऑब्जेक्ट पर नियंत्रित किया जाना चाहिए। –

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