2010-01-22 8 views
12

ले जा रहा है मैं एक WPF उपयोगकर्ता नियंत्रण है कि एक DataGrid शामिल है। मैं इसे देखने के मॉडल के ObservableCollection बाध्यकारी हूँ। प्रत्येक दृश्य मॉडल में दृश्य मॉडल का एक और संग्रह होता है जिसे मैं DataGrid से बांधने के लिए उपयोग कर रहा हूं। तो प्रभाव विवरण विवरण टेम्पलेट में निहित DataGrid के साथ DataGrid प्रभाव है।कैसे एक ग्राफिक लदान/एनीमेशन दिखाने के लिए जब बाध्यकारी WPF डेटा जगह

आम तौर पर बाध्यकारी काफी तेज है, लेकिन कभी कभी जब डेटा का एक बहुत है यह यूआई लटका सकता है, जबकि बंधन/ड्राइंग हो रहा है।

वहाँ एक रास्ता है, जहां मैं एक लोड हो रहा है एनीमेशन या प्रगति बार दिखा सकते हैं या तो, जबकि बंधन/ड्राइंग कार्य प्रगति पर है है?

उत्तर

2

वहाँ शायद एक और अधिक औपचारिक, या कम से कम सरल समाधान है, लेकिन आप एक मॉडल पॉपअप विंडो कि एक कार्यकर्ता धागा में दिखाया गया है और अतुल्यकालिक रूप से बंद कर दिया है जब आपके ग्रिड लोड हो रहा है किया जाता है इस्तेमाल कर सकते हैं:

Window waitWindow = new Window { Height = 100, Width = 200, WindowStartupLocation = WindowStartupLocation.CenterScreen, WindowStyle = WindowStyle.None }; 
waitWindow.Content = new TextBlock { Text = "Please Wait", FontSize = 30, FontWeight = FontWeights.Bold, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center }; 

BackgroundWorker worker = new BackgroundWorker(); 
worker.DoWork += delegate 
{ 
    Dispatcher.BeginInvoke(new Action(delegate { waitWindow.ShowDialog(); })); 

    DataLoader dataLoader = new DataLoader(); // I made this class up 
    dataLoader.DataLoaded += delegate 
    { 
     Dispatcher.BeginInvoke(new Action(delegate() { waitWindow.Close(); })); 
    }; 

    dataLoader.LoadData(); 
}; 

worker.RunWorkerAsync(); 

आप टेक्स्टबॉक को कुछ लोडिंग बार की तरह सुंदरता से प्रतिस्थापित कर सकते हैं, और आप उस ऑब्जेक्ट को पैरामीटर करके कोड को पुनः उपयोग करने योग्य बना सकते हैं जो ग्रिड की लोडिंग को संभालता है और इसे सामान्य रूप से उपयोग की जाने वाली विधि में पास करता है।

मुझे उम्मीद है कि यह आपके लिए काम करता है।

+0

मैं कार्यकर्ता धागा के DoWork प्रतिनिधि अंदर ShowDialog करने के लिए कॉल डाल (इस मामले में जहां डेटा विंडो खोली जाने से पहले भरी हुई है संभाल करने के लिए कार्यकर्ता के बाहर खिड़की दिखा आवश्यक यह अंत में किया जाना है, ShowDialog ब्लॉक के बाद से)। मुझे नहीं पता कि ऐसा होने के लिए यह कितना संभव होगा (यदि यह भी संभव है), लेकिन मैंने सोचा कि मैं इसे दुर्लभ, मुश्किल ट्रैक करने के लिए मुश्किल से पेश करना चाहता हूं। –

1

आप एक डेटा ट्रिगर का उपयोग कर एक प्रतीक्षा कर्सर चालू/बंद कर सकते हैं।

मैं कुछ कोड here तैनात।

2

मुझे एक ही समस्या थी और इस तरह मैंने इसे हल किया।

मुझे पता चला कि डेटा ग्रिड केवल जब यह ग्रिड दिखाता नियंत्रण बनाने शुरू कर देंगे। मेरे मामले में यह समय लेने वाली प्रक्रिया थी। कुछ ट्रेसिंग के बाद मैंने पाया कि नियंत्रण बनाने के दौरान नियंत्रण होता है!

मेरे समाधान MeasureOverride ओवरराइड और आधार वर्ग कॉल चारों ओर प्रतीक्षा कर्सर डाल करने के लिए है। मैंने कक्षा में अपना प्रतीक्षा कर्सर सेटिंग encapsulated। तो कोड इस तरह दिखता है।

protected override Size MeasureOverride(Size availableSize) 
    { 
     using (new DisposableWaitCursor(this)) 
     { 
      return base.MeasureOverride(availableSize); 
     } 
    } 
संबंधित मुद्दे