मुझे एक ऐसा दृश्य मिला है जो GetAll():अपने बाइंड को रीफ्रेश करने के लिए आइटम्ससोर्स कैसे प्राप्त करें?
<DockPanel>
<ListBox ItemsSource="{Binding GetAll}"
ItemTemplate="{StaticResource allCustomersDataTemplate}"
Style="{StaticResource allCustomersListBox}">
</ListBox>
</DockPanel>
GetAll() मेरे व्यूमोडेल में एक अवलोकन योग्य चयन गुण है:
public ObservableCollection<Customer> GetAll
{
get
{
return Customer.GetAll();
}
}
जिसमें एक सूची बॉक्स दिखाता है को GetAll() मॉडल विधि को कॉल करता है जो अवलोकन योग्य को भरने के लिए एक XML फ़ाइल पढ़ता है .:
public static ObservableCollection<Customer> GetAll()
{
ObservableCollection<Customer> customers = new ObservableCollection<Customer>();
XDocument xmlDoc = XDocument.Load(Customer.GetXmlFilePathAndFileName());
var customerObjects = from customer in xmlDoc.Descendants("customer")
select new Customer
{
Id = (int)customer.Element("id"),
FirstName = customer.Element("firstName").Value,
LastName = customer.Element("lastName").Value,
Age = (int)customer.Element("age")
};
foreach (var customerObject in customerObjects)
{
Customer customer = new Customer();
customer.Id = customerObject.Id;
customer.FirstName = customerObject.FirstName;
customer.LastName = customerObject.LastName;
customer.Age = customerObject.Age;
customers.Add(customer);
}
return customers;
}
यह सब ठीक काम करता है जब उपयोगकर्ता किसी अन्य दृश्य पर जाता है, XML फ़ाइल संपादित करता है और वापस आता है इस दृश्य में जहां पुराना डेटा अभी भी दिखा रहा है।
मैं इस दृश्य को "बाइंडिंग रीफ्रेश" करने के लिए कैसे कह सकता हूं ताकि यह वास्तविक डेटा दिखा सके।
ऐसा लगता है कि मैं बहुत अधिक HTML/HTTP रूपक के साथ WPF के बारे में जा रहा हूं, मुझे लगता है कि ऑब्जर्जेबल कोलेक्शन को स्वयं अपडेट करने के लिए एक और प्राकृतिक तरीका है, इसलिए इसका नाम है, लेकिन यह एकमात्र तरीका है इस समय उपयोगकर्ता को एक WPF एप्लिकेशन में डेटा संपादित करने में सक्षम होना चाहिए। तो किसी भी स्तर पर मदद की सराहना की है।
मैं GetAll को GetAll() बदल गया है, धन्यवाद। समस्या यह है कि मेरे पास दो विचार हैं, जिनमें से प्रत्येक को अपने संबंधित व्यू मॉडल्स से अलग GetAll ObservableCollection मिलता है और जब एक अवलोकन करने योग्य चयन बदलता है, तो दूसरा नहीं बदलता है। क्या मुझे इन वैश्विक स्तर पर कहीं स्टोर करने की ज़रूरत है? –
यदि दोनों विचारों को संस्करण के दौरान सिंक्रनाइज़ किया जाना चाहिए, तो हाँ, आपको किसी भी वस्तु को किसी भी तरह साझा करने की आवश्यकता है। आपके मामले में, डेटा एक्सेस सिस्टम हो सकता है जो संग्रह को लोड और कैश करता है, और प्रत्येक व्यूमोडेल वर्तमान संग्रह का अनुरोध करेगा। इस तरह वे दोनों एक दूसरे के संशोधन के बारे में जानते हैं। अब यदि आपको फ़ाइल से संग्रह को फिर से लोड करने की आवश्यकता है, तो आपके पास संग्रह दृश्य ऑब्जेक्ट बदल गया है, ताकि प्रत्येक व्यूमोडेल को चेतावनी देने का एक तरीका होगा, ताकि वे अपना संदर्भ बदलकर एक बार नया प्रॉपर्टी चेंज किया जा सके। –
तो अब जब भी उपयोगकर्ता नियंत्रण (दृश्य) लोड हो जाता है, तो डेटासोर्स को रीफ्रेश करने के लिए मेरा समाधान, बहुत अच्छा काम करता है, धन्यवाद! –