読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

ReactivePropertyで2度押し防止/ReactiveProperty v2.7.0をリリースしました

ReactiveProperty

2度押し防止のための機能を追加しました。

www.nuget.org

名前はBusyNotifierです。

こんな感じで使います。

public class MainWindowViewModel
{
    private BusyNotifier BusyNotifier { get; } = new BusyNotifier();

    public ReactiveProperty<string> Output { get; } = new ReactiveProperty<string>();

    public ReactiveCommand ExecuteCommand { get; }

    public MainWindowViewModel()
    {
        this.ExecuteCommand = this.BusyNotifier
            .Select(x => !x)
            .ToReactiveCommand();

        this.ExecuteCommand.Subscribe(async _ =>
        {
            if (this.BusyNotifier.IsBusy) { return; }
            using (this.BusyNotifier.ProcessStart())
            {
                var result = await this.HeavyTaskAsync();
                this.Output.Value = result.ToString();
            }
        });
    }

    public async Task<DateTime> HeavyTaskAsync()
    {
        await Task.Delay(5000);
        return DateTime.Now;
    }
}