Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
AsyncRelayCommand ve AsyncRelayCommand<T>, eşzamansız işlemleri destekleyerek RelayCommand tarafından sunulan işlevleri genişleten ICommand uygulamalarıdır.
Platform API'leri:
AsyncRelayCommand,AsyncRelayCommand<T>,RelayCommand,IAsyncRelayCommand,IAsyncRelayCommand<T>
Nasıl çalışırlar?
AsyncRelayCommand ve AsyncRelayCommand<T> aşağıdaki ana özelliklere sahiptir:
- Bunlar, kitaplıkta bulunan eşzamanlı komutların işlevselliğini,
Taskdöndüren temsilciler desteğiyle genişletir. - Zaman uyumsuz işlevleri iptali desteklemek için ek
CancellationTokenbir parametreyle sarmalayabilir ve birCanBeCanceledveIsCancellationRequestedözelliklerinin yanı sıra birCancelyöntemi de kullanıma sunarlar. - Bekleyen bir işlemin ilerlemesini izlemek için kullanılabilecek bir
ExecutionTasközelliği ve bir işlemin ne zaman tamamlandığını kontrol etmek için kullanılabilecek birIsRunningsağlarlar. Bu, özellikle yükleme göstergeleri gibi kullanıcı arabirimi öğelerine bir komut bağlamak için yararlıdır. -
IAsyncRelayCommandveIAsyncRelayCommand<T>arabirimlerini uygularlar; bu da görünüm modelinin, türler arasındaki sıkı bağlamayı azaltmak için bunları kullanarak komutları kolayca sunabilmesi anlamına gelir. Örneğin bu, gerekirse bir komutun aynı genel API yüzeyini ortaya çıkararak özel bir uygulamayla değiştirilmesini kolaylaştırır.
Zaman uyumsuz komutlarla çalışma
Örnekte açıklanana RelayCommand benzer bir senaryoyu ancak zaman uyumsuz bir işlemi yürüten bir komut olduğunu düşünelim:
public class MyViewModel : ObservableObject
{
public MyViewModel()
{
DownloadTextCommand = new AsyncRelayCommand(DownloadText);
}
public IAsyncRelayCommand DownloadTextCommand { get; }
private Task<string> DownloadText()
{
return WebService.LoadMyTextAsync();
}
}
İlgili kullanıcı arayüzü koduyla:
<Page
x:Class="MyApp.Views.MyPage"
xmlns:viewModels="using:MyApp.ViewModels"
xmlns:converters="using:Microsoft.Toolkit.Uwp.UI.Converters">
<Page.DataContext>
<viewModels:MyViewModel x:Name="ViewModel"/>
</Page.DataContext>
<Page.Resources>
<converters:TaskResultConverter x:Key="TaskResultConverter"/>
</Page.Resources>
<StackPanel Spacing="8" xml:space="default">
<TextBlock>
<Run Text="Task status:"/>
<Run Text="{x:Bind ViewModel.DownloadTextCommand.ExecutionTask.Status, Mode=OneWay}"/>
<LineBreak/>
<Run Text="Result:"/>
<Run Text="{x:Bind ViewModel.DownloadTextCommand.ExecutionTask, Converter={StaticResource TaskResultConverter}, Mode=OneWay}"/>
</TextBlock>
<Button
Content="Click me!"
Command="{x:Bind ViewModel.DownloadTextCommand}"/>
<ProgressRing
HorizontalAlignment="Left"
IsActive="{x:Bind ViewModel.DownloadTextCommand.IsRunning, Mode=OneWay}"/>
</StackPanel>
</Page>
öğesine tıklandığında Buttonkomutu çağrılır ve ExecutionTask güncelleştirilir. İşlem tamamlandığında özelliği, kullanıcı arabirimine yansıtılan bir bildirim oluşturur. Bu durumda hem görev durumu hem de görevin geçerli sonucu görüntülenir. Görevin sonucunu görüntülemek için TaskExtensions.GetResultOrDefault yönteminin kullanılmasının gerekli olduğunu unutmayın; bu yöntem, iş parçacığını engellemeden (ve muhtemelen bir kilitlenmeye yol açmadan) henüz tamamlanmamış bir görevin sonucuna erişim sağlar.
Örnekler
- MVVM Araç Seti'ni uygulamada görmek için örnek uygulamaya (birden çok UI çerçevesi için) göz atın.
- Birim testlerinde daha fazla örnek de bulabilirsiniz.
MVVM Toolkit