Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9749

Xamarin Community Toolkit カタログ(MVVM編)

$
0
0

この記事は、Xamarin Advent Calendar 2020の22日目の記事です。

はじめに

以下の記事の続きです。

ソースコード
XamarinCommunityToolkitCatalog

MVVM

MVVMのビューモデルで使うような機能です。

AsyncCommand

Taskの非同期処理を扱えるコマンドです。allowsMultipleExecutionsfalseにすれば、Taskの実行中は、CanExecutefalseを返すようになり、ボタンの2度押しを防げます。デフォルトではtrueです。onExceptionで例外発生時の処理を、continueOnCapturedContextで、Task実行時に設定するConfigureAwaitの引数を指定できます。

privateIAsyncCommand_asyncCommand;publicIAsyncCommandAsyncCommand=>_asyncCommand??=newAsyncCommand(async()=>{awaitTask.Delay(1000);},allowsMultipleExecutions:false);

AsyncValueCommand

ValueTaskの非同期処理を扱えるコマンドです。機能的には、AsyncCommandと同じです。

privateIAsyncValueCommand<bool>_asyncValueCommand;publicIAsyncValueCommand<bool>AsyncValueCommand=>_asyncValueCommand??=newAsyncValueCommand<bool>(asyncshouldDelay=>{if(shouldDelay){awaitTask.Delay(1000);}},allowsMultipleExecutions:false);

ObservableObject

INotifyPropertyChangedを実装したクラスです。SetPropertyPropertyChangedの発火を行えます。PropertyChangedのハンドラーは、WeakReferenceで管理されます。

publicclassObservableObjectPageViewModel:ObservableObject{privateint_count;publicintCount{get=>_count;set=>SetProperty(ref_count,value);}privateICommand_countCommand;publicICommandCountCommand=>_countCommand??=newDelegateCommand(()=>Count++);}

ObservableRangeCollection

複数データの追加、削除、置き換えができるObservableCollectionです。

publicclassObservableRangeCollectionPageViewModel{publicObservableRangeCollection<int>Items{get;}=newObservableRangeCollection<int>();privateICommand_addRangeCommand;publicICommandAddRangeCommand=>_addRangeCommand??=newDelegateCommand(()=>{Items.AddRange(Enumerable.Range(Items.Count,5));});privateICommand_removeRangeCommand;publicICommandRemoveRangeCommand=>_removeRangeCommand??=newDelegateCommand(()=>{Items.RemoveRange(Items.TakeLast(5));});privateICommand_replaceRangeCommand;publicICommandReplaceRangeCommand=>_replaceRangeCommand??=newDelegateCommand(()=>{Items.ReplaceRange(Enumerable.Range(0,5));});}

おわりに

とりあえずこれで最後です。


Viewing all articles
Browse latest Browse all 9749

Trending Articles