आम तौर पर, मैं Window
के गुणों को InitializeComponent()
से पहले शुरू कर रहा हूं और बाद में निहित नियंत्रण स्थापित कर रहा हूं। हालांकि, मैं उन सभी संगत नहीं रहा हूं, और मैंने वास्तव में आदेश के साथ कोई समस्या नहीं देखी है। तो:एक WPF विंडो के लिए एक कन्स्ट्रक्टर में, InitializeComponent() से पहले क्या जाना चाहिए और इसके बाद क्या?
- क्या मैं (संभावित रूप से) कुछ भयानक कर रहा हूं? विशेष रूप से,
InitializeComponent()
से पहले बाल नियंत्रण की गुणों को सेट करने के साथ कोई समस्या है? - इस संबंध में अच्छी शैली क्या है?
संपादित करें: के बाद से पहले दो जवाब मुझे मिल गया एक छोटा सा विरोधाभासी थे, मुझे और अधिक विशिष्ट हो:
public Foo Foo {get; protected set}
public FooWindow (Foo foo)
{
Foo = foo;
this.Closing += FooWindow_Closing;
Foo.Frobbed += Foo_Frobbed;
InitializeComponent();
this.DataContext = this;
this.Title = Foo.Name() + " Window";
FooListView.ItemSource = Foo.CalculateList();
FocusManager.SetFocusedElement(this, FooListView);
}
इस अधिकार के बारे में है? क्या मुझे बस एमवीवीएम करना चाहिए और मेरे Window
कन्स्ट्रक्टर में कुछ भी नहीं है?
यह ध्यान रखें कि, अगर MVVM का उपयोग कर, DataContext सेट किया जाना चाहिए ** से पहले महत्वपूर्ण है ** InitializeComponent() या फिर अपने ViewModel बाइंडिंग बुला ठीक से सेट नहीं किया जाएगा। प्रारंभिक कॉम्पोनेंट() आपकी सभी संपत्ति बाध्यकारी गेटर्स को कॉल करता है, इसलिए यदि इसे पहले कहा जाता है, तो आपके बाइंडिंग को उचित मान नहीं मिलेगा जब तक कि NotifyPropertyChanged को आपकी प्रत्येक प्रॉपर्टी पर दोबारा कॉल नहीं किया जाता है। यह वही सिद्धांत किसी अन्य प्रारंभिक तर्क पर लागू होता है जो आपके xaml को प्रारंभ करने के तरीके को प्रभावित कर सकता है। – jeff17237