पृष्ठभूमि: मैं MVVM का उपयोग कर एक WPF अनुप्रयोग बना रहा हूं, और एक डि कंटेनर का उपयोग कर मेरी ViewModels का निर्माण करने केApp.xaml फ़ाइल को पार्स नहीं किया गया है यदि मेरा ऐप स्टार्टअपयूरी सेट नहीं करता है?
मेरे App.xaml इस तरह दिखता है:
<Application x:Class="WpfApp.App"
...xmlns etc...
StartupUri="MainWindow.xaml">
<Application.Resources>
<app:ServiceLocator x:Key="serviceLocator" />
</Application.Resources>
</Application>
MainWindow.xaml इस तरह दिखता है:
<Window x:Class="CompositeMefWpfApp.MainWindow"
...xmlns etc... >
<Control.DataContext>
<Binding Path="MainWindowViewModel" Source="{StaticResource serviceLocator}" />
</Control.DataContext>
अब, यह सब ठीक काम करता है, लेकिन StartupUri
XAML में हार्डकोड किया गया है, जो मैं नहीं चाहता हूं।
कई ब्लॉगपोस्ट और लेख मैं ने पाया मैं StartupUri
हटाया, और के मार्गदर्शन के बाद, App.xaml.cs में OnStartup
hooking द्वारा MainWindow
बनाने की कोशिश की इस तरह:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
new MainWindow().Show();
}
समस्या है, ऐप्लिकेशन क्रैश विंडो को दिखाने का प्रयास करते समय, इस अपवाद के साथ:
'{serviceLocator}' नामक संसाधन नहीं ढूंढ सकता। संसाधन नाम केस संवेदनशील हैं। त्रुटि वस्तु मार्कअप फ़ाइल 'WpfApp; घटक/mainwindow.xaml' में 'System.Windows.Data.Binding' में रेखा 8 स्थिति 45.
जहां तक मेरा बता सकते हैं, <Application.Resources>
अनुभाग बस पढ़ नहीं किया जा रहा है xaml फ़ाइल से बाहर। हालांकि कि एक बदसूरत हैक है, और मुझे मदद नहीं करता है अगर मैं App.xaml फ़ाइल में बाद में कुछ और ही रखना चाहते थे
Resources.BeginInit();
Resources.Add("serviceLocator", new ServiceLocator());
Resources.EndInit();
: मैं कुछ कोड OnStartup में संसाधन जोड़ने के लिए प्रोग्राम के इस तरह रख सकते हैं ? :-(
मैं किसी अन्य घटना hooking जाना चाहिए वहाँ इस के चारों ओर एक रास्ता है
यह हल करता है, धन्यवाद! –
ओएमजी, धन्यवाद! मैंने सोचा कि मैं पागल हो रहा था – Heliac
xaml से ईवेंट सेट करना क्यों महत्वपूर्ण है? यह कन्स्ट्रक्टर से स्थापित होने में विफल रहता है ... –