.net - Lazy loading WPF tab content -


मेरा WPF अनुप्रयोग एक अलग स्क्रीन युक्त प्रत्येक टैब के साथ एक टैबकंट्रोल के रूप में संगठित है।

एक टैब आईटीएम लोड करने के लिए थोड़ी सी समय लेता है जो डेटा के लिए बाध्य चूंकि यह TabItem एक स्क्रीन का प्रतिनिधित्व करता है जो उपयोगकर्ता शायद ही कभी उपयोग कर सकते हैं, मैं डेटा लोड नहीं करना चाहता जब तक कि उपयोगकर्ता टैब का चयन न करे।

मैं यह कैसे कर सकता / सकती हूं?

< टैब नियंत्रण दो तरीकों से काम करता है,

  1. जब हम टैब आइटम को स्पष्ट रूप से जोड़ते हैं, तो प्रत्येक टैब वस्तु को लोड किया जाता है और आरम्भ किया जाता है।

  2. जब हम आइटमों की सूची के लिए आइटम सपोर्ट करते हैं, और हम प्रत्येक डेटा मद के लिए अलग-अलग डेटा टेम्पलेट सेट करते हैं, टैब नियंत्रण चयनित डेटा आइटम का केवल एक "सामग्री" दृश्य बनाएगा, और केवल तभी टैब आइटम चुना गया है, सामग्री दृश्य की "लोडेड" ईवेंट निकाल दिया जाएगा और सामग्री लोड हो जाएगी। और जब अलग टैब आइटम चुना जाता है, तो पहले से चयनित सामग्री दृश्य के लिए "अनलोडेड" ईवेंट निकाल दिया जाएगा और नए लोड किए गए डेटा आइटम के लिए "लोडेड" निकाल दिया जाएगा।

दूसरी विधि का उपयोग करना थोड़ा जटिल है , लेकिन रनटाइम पर यह निश्चित रूप से संसाधनों को कम करेगा, लेकिन टैब स्विच करने के समय थोड़ी धीमी गति से हो सकता है।

आपको निम्नलिखित के रूप में कस्टम डेटा वर्ग बनाना होगा

  class TabItemData {सार्वजनिक स्ट्रिंग हैडर {get; set;} सार्वजनिक स्ट्रिंग संसाधन कुंजी {get; set;} सार्वजनिक ऑब्जेक्ट MyBusinessObject {get; set;}}  

और आप TabItemData की सूची या सरणी बनाना चाहिए और आपको TabItemData की सूची / सरणी के लिए TabControl के आइटम्स स्रोत को सेट करना होगा।

तब TabControl के ItemTemplate को डेटा टेम्पलेट बाइंडिंग "हैडर" प्रॉपर्टी के रूप में बनाएं।

तब ResourceKey गुण में पाया संसाधन कुंजी की ContentTemplate के साथ ContentControl युक्त डेटा टेम्पलेट के रूप में TabControl का ContentTemplate बनाएँ।


Comments