2012-10-29 14 views
5

Ho una sorgente dati lenta, quindi la creo in modo asincrono. Inoltre, molte proprietà del mio viewmodel sono esse stesse lente. Quindi, li faccio asincrono troppo (legame ad una griglia delle proprietà Telerik):"IsAsync" non ha effetto per la proprietà slow?

<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> 

Quando il debugging, posso vedere che l'origine dati è infatti creato in un altro thread, quindi non bloccare l'interfaccia utente. Tuttavia, quando arrivo a SlowProperty, il debugger rivela che sono ancora nel thread principale, il che è dimostrato dal fatto che l'interfaccia utente si blocca fino a quando la proprietà non ritorna.

Q: Cosa mi manca qui? IsAsync non è sufficiente per le proprietà asincrone?

Modifica: Sembra che questo funzioni per un normale TextBlock. Il comportamento dello IsAsync dipende dall'implementazione di un controllo? (In questo caso sospetto un bug nella griglia di proprietà.)

risposta

5

Sei sempre ecouraged per utilizzare IsAsyncBinding con PriorityBinding. La GUI aspetterà che la proprietà venga eseguita. Ma con PriorityBinding controllerà se la prima proprietà Binding è slow, in caso affermativo, selezionerà il successivo segnaposto vincolante (che dovrebbe essere veloce). Ma quando la proprietà slow viene valutata, diventerebbe il valore attivo dal binding.

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

Nel tuo caso, si può semplicemente impostare alcuni defaultValue invece di dare più binding.

+1

Stai dicendo che 'PriorityBinding' è fondamentale per l'associazione asincrona? – l33t

Problemi correlati