オブジェクトの非同期ロードを処理し、それに応じてカーソルを変更するクラスを実装しました。つまり、UpdateCursorメソッドに次のように記述します。
static Cursor cursor;
public AsyncLoader(Func<CbT> request, Callback callback, Cursor cursor)
{
this.request = request;
this.callback = callback;
AsyncLoader<CbT>.cursor = cursor;
LatestRequestId = Guid.NewGuid();
UpdateCursor();
...
}
void UpdateCursor()
{
if (LatestRequestId == Guid.Empty)
{
cursor = Cursors.Arrow;
}
else
{
cursor = Cursors.AppStarting;
}
}
このクラスを使用するクラスには、INotifyProperty を実装する Cursor プロパティがあり、ウィンドウのカーソルにバインドされています。
private Cursor _CurrentCursor;
public Cursor CurrentCursor
{
get { return _CurrentCursor; }
set
{
if (value != _CurrentCursor)
{
_CurrentCursor = value;
OnPropertyChanged("CurrentCursor");
}
}
}
ビューで:
Cursor="{Binding CurrentCursor}"
問題は、CurrentCursor を AsyncLoader に渡し、UpdateCursor の実行時に変更が CurrentCursor に反映され、PopertyChange イベントが発生するようにするにはどうすればよいかということです。