2014-04-04 5 views
8

Hy जाओ,WPF माता पिता खिड़की

मेरी MainWindow.xaml.cs में मैं अपने लिस्टबॉक्स के संदर्भ में प्राप्त करने के लिए एक गेटर बनाया फ़ाइल।

public ListBox LoggerList 
{ 
    get { return Logger; } 
}  

अब मैं लॉगर लिस्ट को सामान्य कक्षा से एक्सेस करना चाहता हूं लेकिन मैं काम नहीं करता हूं।

MainWindow parentWindow = Window.GetWindow(this) as MainWindow; 
object selectedItem = parentWindow.LoggerList; 

लेकिन एक * xaml.cs फ़ाइल में और एक सामान्य * .cs फ़ाइल में नहीं यह केवल काम करता है: मैं निम्नलिखित की कोशिश की।

सादर

+0

एक WPF ListBox आपके सूची बॉक्स में संपत्ति रखने के बजाय बाध्यकारी है, आपके पास अपने स्रोत वाले स्रोत में एक संपत्ति होनी चाहिए, और उन्हें सूची बॉक्स में जोड़ना चाहिए (LoggerList.ItemSource = myList; फिर आप अपने बाध्य करने में सक्षम होंगे कई खिड़कियों के लिए कक्षाएं और इसलिए आप उनका उपयोग करने में सक्षम होंगे। जिस तरह से आप इसे संभालने का तरीका सही तरीका नहीं है। आपको बाध्यकारी और मूल WPF उदाहरणों को देखना चाहिए। – woutervs

+3

इसे आज़माएं: 'विंडो पैरेंटविंडो = एप्लिकेशन। वर्तमान। MainWindow' –

+0

हाय, विंडो पैरेंट विन्डो = एप्लिकेशन.क्यूरेंट.माइनविंडो के साथ इसे आजमाया। लेकिन मुझे लॉगरलिस्ट नहीं मिल सकता है। – user2644964

उत्तर

13
वहाँ

WPF में Window रों तक पहुँचने के तरीके के एक नंबर रहे हैं। आप कई खुला है, तो आप इस तरह के माध्यम से उन्हें पुनरावृति कर सकते हैं:

foreach (Window window in Application.Current.Windows) window.Close(); 

आप कस्टम Window एक विशेष प्रकार की थी, तो आप इस इस्तेमाल कर सकते हैं:

foreach (Window window in Application.Current.Windows.OfType<YourCustomWindow>()) 
    ((YourCustomWindow)window).DoSomething(); 

तुम सिर्फ एक के बाद कर रहे हैं MainWindow के संदर्भ में है, तो आप बस इस का उपयोग कर सकते हैं:

Window mainWindow = Application.Current.MainWindow; 

हालांकि, इस विधि का उपयोग कर, इस बात की संभावना है कि यहवापस आ जाएगी है

// From inside MainWindow.xaml.cs 
Application.Current.MainWindow = this; 

हालांकि यह ध्यान दिया जाना चाहिए, कि @woutervs सही है ... आप Window से यूआई नियंत्रण तक पहुँचने नहीं होना चाहिए: इस मामले में, यह के निर्माता में इस संपत्ति के लिए सुनिश्चित करें कि आप MainWindow सेट है कि लाइब्रेरी कक्षाओं में है। आपको वास्तव में डेटा को ListBox.ItemsSource पर संग्रहित करना चाहिए और फिर इसके बजाय डेटा संग्रह में हेरफेर करना चाहिए।


अद्यतन >>

मैं नहीं जानता कि क्यों अपने Application.Current वस्तु null है ... क्योंकि आप किसी भिन्न AppDomain में अपने वर्ग पुस्तकालय लोड कर दिया है यह हो सकता है। किसी भी तरह से, मुझे लगता है कि आप बड़ी तस्वीर खो रहे हैं। वास्तव में कोई कारण नहीं है कि क्लास लाइब्रेरी क्लास को मुख्य Window के संदर्भ की आवश्यकता क्यों होनी चाहिए।

यदि आपको डेटा संग्रह पर कुछ काम करने की ज़रूरत है, तो बस डेटा संग्रह को पीछे से कोड या अपने व्यू मॉडल से पास करें। एक बार काम पूरा होने के बाद, बस इसे यूआई पर वापस पास करें जहां आपके पास ListBox और/या संग्रह है जो ItemsSource संपत्ति से जुड़ा हुआ संग्रह है।

+0

हाय, इसे विंडो पैरेंटविंडो = एप्लिकेशन.क्यूरेंट.माइनविंडो के साथ आज़माएं। लेकिन मुझे लॉगरलिस्ट नहीं मिल सकता है। \t मुझे इसकी आवश्यकता है क्योंकि मैं इसके साथ तत्व जोड़ने के बाद सूची बॉक्स को स्वत: स्क्रॉल करना चाहता हूं: LoggerList.ScrollIntoView (LoggerList.Items [LoggerList.Items.Count - 1]); – user2644964

+0

कृपया मेरा दूसरा अंतिम अनुच्छेद दोबारा पढ़ें। – Sheridan

+0

हाय, मैंने मेनवाइंडो को इस प्रॉपर्टी में इस कन्स्ट्रक्टर में भी सेट किया है। हाँ, मैं सूची में एक अवलोकन संग्रह बांधता हूं लेकिन सूची बॉक्स बाध्यकारी के साथ स्वत: स्क्रॉल नहीं करता है। क्या आपका मतलब था या कुछ और? – user2644964

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