かずきのBlog@hatena

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

Throttleの間隔を別のRxPropから動的に指定したい

こんなつぶやきを見たので。

書いてみたけど、こんな感じかなぁ?

public class MainWindowViewModel : BindableBase
{
    public ReactiveProperty<string> Input { get; private set; }

    private ReactiveProperty<string> output;

    public ReactiveProperty<string> Output
    {
        get { return this.output; }
        set { this.SetProperty(ref this.output, value); }
    }

    public ReactiveProperty<int> Interval { get; private set; }

    public MainWindowViewModel()
    {
        this.Input = new ReactiveProperty<string>();
        this.Interval = new ReactiveProperty<int>();
        this.Interval.Subscribe(v =>
        {
            var initialValue = default(string);
            if (this.Output != null)
            {
                initialValue = this.Output.Value;
                this.Output.Dispose();
            }
            this.Output = this.Input.Throttle(TimeSpan.FromSeconds(v)).ToReactiveProperty(initialValue);
        });
    }
}