2012-10-29 13 views
5

मेरे पास धीमा डेटा स्रोत है, इसलिए मैं इसे असीमित रूप से बना देता हूं। इसके अलावा, मेरे व्यूमोडेल के कई गुण स्वयं धीमे हैं। इसलिए, मैं उन्हें अतुल्यकालिक भी (एक Telerik संपत्ति ग्रिड के लिए बाध्य) बनाने:"IsAsync" धीमी संपत्ति के लिए कोई प्रभाव नहीं है?

<Grid> 
    <Grid.DataContext> 
    <ObjectDataProvider ObjectType="{x:Type viewModels:MyViewModel}" 
     IsAsynchronous="True" x:Name="myViewModel" /> 
    </Grid.DataContext> 
    <telerik:RadPropertyGrid x:Name="settings" Item="{Binding IsAsync=True}"> 
    <telerik:RadPropertyGrid.PropertyDefinitions> 
     <telerik:PropertyDefinition 
     Binding="{Binding Path=SlowProperty,IsAsync=True,Mode=TwoWay}" /> 
    </telerik:RadPropertyGrid.PropertyDefinitions> 
    </telerik:RadPropertyGrid> 
</Grid> 

जब डीबगिंग, मैं देख सकता हूँ कि डेटा स्रोत वास्तव में, एक और धागा में बनाया गया है और इसलिए यूआई अवरुद्ध नहीं। हालांकि, जब मैं SlowProperty में जाता हूं तो डीबगर बताता है कि मैं अभी भी मुख्य थ्रेड में हूं - जो इस तथ्य से साबित होता है कि यूआई संपत्ति लौटने तक लटकती है।

प्रश्न: मुझे यहां क्या याद आ रही है? IsAsync असीमित गुणों के लिए पर्याप्त नहीं है?

संपादित करें: ऐसा लगता है कि यह सामान्य TextBlock के लिए काम करता है। IsAsync व्यवहार नियंत्रण के कार्यान्वयन पर निर्भर है? (इस मामले में मैं संपत्ति ग्रिड में एक बग संदेह है।)

उत्तर

5

तुम हमेशा PriorityBinding साथ IsAsyncBinding उपयोग करने के लिए ecouraged कर रहे हैं। जीयूआई तब तक इंतजार करेगा जब तक कि संपत्ति को निष्पादित नहीं किया जाता है। लेकिन PriorityBinding के साथ यह जांच करेगा कि पहले Binding संपत्ति slow है, यदि ऐसा है, तो यह अगले प्लेसहोल्डर बाइंडिंग (जो तेज़ होना चाहिए) का चयन करेगा। लेकिन जब धीमी संपत्ति का मूल्यांकन किया जाता है, तो यह बाध्यकारी द्वारा सक्रिय मूल्य बन जाएगा।

<TextBlock> 
<TextBlock.Text> 
    <PriorityBinding FallbackValue="defaultvalue"> 
    <Binding Path="SlowestProp" IsAsync="True"/> 
    <Binding Path="SlowerProp" IsAsync="True"/> 
    <Binding Path="SurelyFastProp" /> 
    </PriorityBinding> 
</TextBlock.Text> 
</TextBlock>  

आपके मामले में, आप बस कुछ defaultValue बजाय कई बाइंडिंग देने के सेट कर सकते हैं।

+1

क्या आप कह रहे हैं कि 'प्राथमिकता बाइंडिंग' असीमित बाध्यकारी के लिए महत्वपूर्ण है? – l33t

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