से बाध्यकारी देरी निम्नलिखित ViewModel संपत्ति पर विचार करें:एक सूत्र
private string _slowProperty;
public string SlowProperty
{
get { return _slowProperty; }
set
{
_slowProperty = value;
RaisePropertyChanged("SlowProperty");
}
}
कौन सा है, तो जैसे एक पाठ बॉक्स के लिए बाध्य है:
<TextBox Text="{Binding SlowProperty}" />
अब, समस्या यहाँ है हर बार का मूल्य है कि SlowProperty में परिवर्तन होता है, और यह अक्सर ऐसा करता है, टेक्स्टबॉक्स जायेगा और इसका मूल्य प्राप्त करने का प्रयास करेगा, जो काफी धीमा है। मैं एसिंक बाध्यकारी का उपयोग कर स्थिति को कम कर सकता हूं, हालांकि, यह अभी भी सीपीयू चक्र को बर्बाद कर देगा।
<TextBlock Text="{z:DelayedSourceBinding SlowProperty}" />
जो एक निश्चित विलंब के बाद बाध्यकारी प्राप्त करने की कोशिश करेंगे:
इसके बजाय, मैं क्या करना चाहते हैं की तरह कुछ है। तो उदाहरण के लिए यदि SlowProperty
एक पंक्ति में 5 बार बदल गया है, तो थोड़ी देर के भीतर, केवल अंतिम टेक्स्ट टेक्स्टबॉक्स में दिखाई देगा।
मैं following project कि ऐसा ही कुछ करता है पाया है, तो यह मेरे उदाहरण मैं यह इतना की तरह इस्तेमाल कर सकते हैं:
<TextBox Text="{z:DelayBinding Path=SearchText}" />
इसके साथ समस्या है, यह केवल अद्यतन करता है कि बाध्यकारी लक्ष्य के बाद है देरी। स्रोत पथ, हालांकि, मूल्यांकन किया जाता है और स्रोत के हर परिवर्तन पर इसका गेटटर निष्पादित किया जाता है। जो, SlowProperty
के मामले में अभी भी सीपीयू चक्र बर्बाद कर देगा।
मैंने अपनी देरी बाध्यकारी कक्षा बनाने की कोशिश की है, लेकिन got stuck। क्या कोई अन्य बांधने वाला यंत्र है जो ऐसा कुछ कर सकता है? DelayBinding को ऐसा ही एक समाधान -
पूर्णता के लिए, यहाँ 2 अन्य परियोजनाओं है कि इसी तरह कार्य करते हैं, फिर भी, कोई भी पता समस्या मैं का सामना कर रहा है। हालांकि, यह उपयोग करने के लिए थोड़ा और जटिल है।
DelayedBindingTextBox - लागू कस्टम टेक्स्टबॉक्स नियंत्रण का उपयोग करके बाध्यकारी में देरी हुई।
धन्यवाद!
कॉलिन, उत्कृष्ट। सभी सीएस समस्याओं को संकेत की एक और परत जोड़कर हल किया जा सकता है! :) –
आप शायद सही हैं, वास्तव में, यह एक समस्या है जिसे वीएम स्तर पर हल किया जाना चाहिए। हालांकि, मैं अभी भी जानना चाहता हूं कि कस्टम बाइंडिंग करना संभव है, जैसा कि मैंने वर्णन किया है। – VitalyB