से पैरामीटरयुक्त कन्स्ट्रक्टर को कॉल करना WPF का उपयोग करते समय मैंने देखा कि जब मैं XAML फ़ाइल में नियंत्रण जोड़ता हूं, तो डिफ़ॉल्ट कन्स्ट्रक्टर को कॉल किया जाता है।एक्सएएमएल
क्या पैरामीटरयुक्त कन्स्ट्रक्टर को कॉल करने का कोई तरीका है?
से पैरामीटरयुक्त कन्स्ट्रक्टर को कॉल करना WPF का उपयोग करते समय मैंने देखा कि जब मैं XAML फ़ाइल में नियंत्रण जोड़ता हूं, तो डिफ़ॉल्ट कन्स्ट्रक्टर को कॉल किया जाता है।एक्सएएमएल
क्या पैरामीटरयुक्त कन्स्ट्रक्टर को कॉल करने का कोई तरीका है?
नहीं। एक्सएएमएल से नहीं [डब्ल्यूपीएफ का उपयोग करते समय]।
.NET 4.0 एक नई सुविधा लाता है जो उत्तर को चुनौती देता है।
<object ...>
<x:Arguments>
oneOrMoreObjectElements
</x:Arguments>
</object>
अच्छा, मैं तुम्हें खुश हूँ इसे लाया –
http://www.wpftutorial.net/XAML2009.html –
पर एक और पोस्ट यहां किसी और के लिए जो वास्तव में इस उत्तर की तलाश में आया, मैं आपको कुछ समय बचाऊंगा क्योंकि आप इस पोस्ट को अगले के बारे में ढूंढ रहे हैं: http: //stackoverflow.com/questions/14347181/how-to-fix-xaml2009- भाषा-construct-is-not-allowed-here – Kevek
मुझे पता है मैं देर से पार्टी के लिए यहाँ हूँ, लेकिन जब से कोई भी वास्तव में WPF सम्मेलनों को संबोधित किया, मैंने सोचा कि मैं में झंकार चाहते हैं।
के मार्गदर्शक सिद्धांत में से एक एक्सएएमएल-अनुकूल ऑब्जेक्ट्स यह है कि उन्हें एक डिफ़ॉल्ट कन्स्ट्रक्टर के साथ पूरी तरह उपयोग करने योग्य होना चाहिए, यानी, ऐसा कोई व्यवहार नहीं है जो गैर-डिफ़ॉल्ट कन्स्ट्रक्टर का उपयोग करते समय केवल पहुंच योग्य हो। XAML की घोषणात्मक प्रकृति के साथ फिट करने के लिए, ऑब्जेक्ट पैरामीटर को संपत्ति सेटर्स के माध्यम से निर्दिष्ट किया जाता है। एक ऐसा सम्मेलन भी है जो कहता है कि जिस क्रम में एक्सएएमएल में गुण निर्धारित किए गए हैं, वह महत्वपूर्ण नहीं होना चाहिए।
आप कर सकते हैं, हालांकि, कुछ विशेष विचार है कि अपने कार्यान्वयन के लिए महत्वपूर्ण हैं, लेकिन सम्मेलन के साथ अंतर पर:
StreamSource
और UriSource
दोनों को सेट करने का कोई मतलब नहीं है।इन मामलों को संभालने में आसान बनाने के लिए, ISupportInitialize
इंटरफ़ेस प्रदान किया जाता है। जब एक वस्तु पढ़ सकते हैं और (जैसे कि, पार्स) XAML से बनाया जाता है, ISupportInitialize
को लागू वस्तुओं विशेष रूप से नियंत्रित किया जाएगा:
BeginInit()
कहा जाएगा।EndInit()
कहा जाता है।BeginInit()
को
होने वाले कॉल का धीरे-धीरे EndInit()
, आप संभाल कर सकते हैं जो कुछ भी आप की आवश्यकता है कि कुछ गुण सेट किया जा सहित लागू करने के लिए की जरूरत है, नियम। इस तरह आपको सृजन पैरामीटर को संभालना चाहिए; कन्स्ट्रक्टर तर्क की आवश्यकता नहीं है।
ध्यान दें कि ISupportInitializeNotification
भी प्रदान किया गया है, जो IsInitialized
संपत्ति और Initialized
ईवेंट जोड़कर उपरोक्त इंटरफ़ेस को बढ़ाता है। मैं विस्तारित संस्करण का उपयोग करने की सलाह देते हैं।
हां, आप इसे ObjectDataProvider
द्वारा कर सकते हैं। यह आप गैर डिफ़ॉल्ट निर्माता, उदाहरण के लिए कॉल करने के लिए अनुमति देता है:
<Grid>
<Grid.Resources>
<ObjectDataProvider x:Key="myDataSource"
ObjectType="{x:Type local:Person}">
<ObjectDataProvider.ConstructorParameters>
<system:String>Joe</system:String>
</ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>
</Grid.Resources>
<Label Content="{Binding Source={StaticResource myDataSource}, Path=Name}"></Label>
</Grid>
कि व्यक्ति संभालने
public class Person
{
public Person(string Name)
{
this.Name = Name;
}
public string Name { get; set; }
}
दुर्भाग्य से आप ConstructorParameters
को नहीं बांध सकता है। कुछ कामकाज देखें here।
कृपया मेरे सवाल पर एक नज़र डालें http://stackoverflow.com/questions/15735830/wpf-best-practice-of-registering-a-delegatecommand-to-a-compositecommand –