2012-10-29 11 views
5

Mam wolne źródło danych, więc tworzę je asynchronicznie. Ponadto wiele właściwości mojego viewmodelu jest powolnych. Stąd, robię im zbyt asynchroniczny (wiążący do siatki własności Telerik):"IsAsync" nie ma wpływu na powolną właściwość?

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

podczas debugowania, widzę, że źródło danych jest rzeczywiście stworzony w innym wątku, stąd nie blokując UI. Jednakże, kiedy dostaję się do SlowProperty, debugger ujawnia, że ​​wciąż jestem w Głównym wątku - o czym świadczy fakt, że interfejs użytkownika wisi, dopóki właściwość nie powróci.

Pytanie: Czego mi tu brakuje? Czy nie wystarcza IsAsync dla właściwości asynchronicznych?

Edytuj: Wygląda na to, że działa normalnie pod TextBlock. Czy zachowanie IsAsync jest zależne od implementacji kontrolki? (W tym przypadku podejrzewam błąd w siatce właściwości.)

Odpowiedz

5

Zawsze jesteś zachęcany do korzystania z IsAsyncBinding z PriorityBinding. GUI będzie czekać, aż właściwość zostanie wykonana. Ale z PriorityBinding sprawdzi, czy pierwsza właściwość Binding jest slow, jeśli tak, to wybierze następną wiązkę zastępczą (która powinna być szybka). Ale gdy zostanie oceniona powolna właściwość, stanie się aktywną wartością przez powiązanie.

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

W twoim przypadku można po prostu ustawić niektóre defaultValue zamiast dać wiele powiązań.

+1

Czy mówisz, że "PriorityBinding" ma kluczowe znaczenie dla asynchronicznego powiązania? – l33t

Powiązane problemy