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 veAsyncRelayCommand<T>, ICommand tarafından RelayCommandsunulan işlevleri zaman uyumsuz işlemler için destekle genişleten uygulamalardı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ığa dahil edilen zaman uyumlu komutların işlevlerini, geri dönen temsilciler için
Taskdestekle 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
ExecutionTaskişlemin ilerleme durumunu izlemek için kullanılabilecek bir özelliği veIsRunningbir işlemin ne zaman tamamlandığını denetlemek için kullanılabilecek bir özelliği kullanıma sunar. Bu, özellikle yükleme göstergeleri gibi kullanıcı arabirimi öğelerine bir komut bağlamak için yararlıdır. - ve
IAsyncRelayCommand<T>arabirimlerini uygularlarIAsyncRelayCommand, yani görünüm modeli, türler arasındaki sıkı bağlamayı azaltmak için bunları kullanarak komutları kolayca kullanıma açabilir. Ö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ı arabirimi 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östermek için yönteminin kullanılması TaskExtensions.GetResultOrDefault gerekli olduğunu unutmayın; bu, iş parçacığını engellemeden (ve kilitlenmeye neden olabilir) 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