2010-09-30 18 views
6

से यूआई बाउंड गुणों को अद्यतन करना पृष्ठभूमिवर्कर से व्यूमोडेल के यूआई बाध्य गुणों को अद्यतन करने के साथ कोई संभावित समस्या है? मैं वीआई को अपडेट करने की कोशिश कर रहा हूं, जबकि यह यूआई के लिए बाध्य है, और संभावित रूप से उपयोगकर्ता टाइप कर रहे हैं .. सिंक्रनाइज़ेशन यहां कैसे काम करता है (मुझे नहीं लगता कि मैं एक्सएएमएल से लॉक स्टेटमेंट का उपयोग कर सकता हूं)।WPF MVVM BackgroundWorker

अग्रिम धन्यवाद ..

उत्तर

3

स्केलर गुणों को अपडेट करते समय, आपको UI थ्रेड पर ऐसा करने की चिंता करने की आवश्यकता नहीं है। PropertyChanged ईवेंट स्वचालित रूप से UI थ्रेड पर marshalled है।

हालांकि, लागू करने वाले संग्रहों के लिए काम नहीं करेगा। CollectionChanged ईवेंट को यूआई थ्रेड पर नहीं जोड़ा जाएगा, और यह अपवाद का कारण बन जाएगा। इसलिए यदि आप एक संग्रह को संशोधित करते हैं जो ItemsControl से जुड़ा हुआ है, तो आपको UI थ्रेड पर ऐसा करने के लिए Dispatcher.Invoke (या कोई अन्य सिंक्रनाइज़ेशन तंत्र) का उपयोग करने की आवश्यकता है। एक अन्य विकल्प एक विशेष संग्रह का उपयोग करना है जो घटना को सही धागे पर मारने का ख्याल रखता है। इस तरह के संग्रह के उदाहरण के लिए this article देखें।

+0

I जोश आइंस्टीन का उपयोग कर रहा हूं (http://stackoverflow.com/questions/2091988/how-do-i-update-an-observablecollection-via-a-worker-thread) संग्रहों को अपडेट करने के लिए AddOnUI। लेकिन मैं मुख्य रूप से एमवीवीएम में ऑब्जेक्ट प्रॉपर्टी के बारे में चिंतित हूं जो बदले में व्यूमोडेल के अन्य गुणों को खिलाता है। – Bhuvan

1

सिल्वरलाइट के साथ मेरा अनुभव में, ऐसा करने के लिए कोशिश कर रहा एक अपवाद वैसे भी कारण होगा।

असल में आपको प्रेषक धागे से बाध्य गुणों को अपडेट करने की आवश्यकता है, जैसे कि आप सीधे यूआई को संशोधित कर रहे थे।

आदेश परीक्षण के लिए एक SameThreadDispatcher और एक SystemDispatcher उपयोग करते हैं, ViewModel है कि एक असली Dispatcher के बारे में जानने के बिना, मैं इसे एक IDispatcher इंटरफ़ेस बनाने के लिए उपयोगी पाया है ऐसा करने के लिए अनुमति देने के लिए तो में (जो असली बात करने के लिए प्रतिनिधियों) के लिए उत्पादन। फिर आप निर्भरता के रूप में ViewModel IDispatcher पास करते हैं।

+0

मुझे सिल्वरलाइट के बारे में पता नहीं है, लेकिन डब्ल्यूपीएफ में आप बिना किसी समस्या के कार्यकर्ता धागे से व्यूमोडेल गुणों को अपडेट कर सकते हैं, लेकिन यूआई थ्रेड पर संग्रहों को संशोधित करना होगा ... (विवरण के लिए मेरा उत्तर देखें) –

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