泥庭

2014年6月20日

ReactivePropertyを使いたい人のための、ReactiveExtensions入門(その1)

Filed under: .NET, LINQ, WPF — タグ: , , , , — yone64 @ 11:52 PM

タイトル書いてみて、そんなやつおらんやろ。ってなりましたが、まぁ気にせずに。
# そんなことよりRibbonの記事の続きをって人もいないやろうし、

最近、ReactivePropertyを使うようになって、Reactive Extensions(以後、Rx)を知らなさすぎるなぁと、思い知ったのでメモがてら残してきたいと思います。
ところで、ReactivePropertyってなに?って人は、ひとまず
コチラに。超ざっくり言うとMVVMで便利なライブラリです。

public class MainViewModel
{
    public ReactiveCommand Command { get; private set; }

    public MainViewModel()
    {
        this.Command = new ReactiveCommand();
        this.Command.Subscribe(_ => Console.WriteLine("one"));
    }
}

↑こんな感じでVM書いて、CommandをBindingしておけば、クリック時に”one”がコンソールに出力されます。簡単ですね。
そのうえ、イベントベースのRx(Hotっていうやつ?)なので分配もできます。はい。

public class MainViewModel
{
    public ReactiveCommand Command { get; private set; }

    public MainViewModel()
    {
        this.Command = new ReactiveCommand();
        this.Command.Subscribe(_ => Console.WriteLine("one"));
        this.Command.Subscribe(_ => Console.WriteLine("two"));
    }
}

↑のように書くと、”one”も”two”も表示されますね。なるほど。ところで、分配っていつ行われるか気になったので、ちょっと調べてみました。

this.Command = new ReactiveCommand();

var io = this.Command
    .Do(_ => Console.WriteLine("do"))
    .Where(_ => Condition()));

io.Subscribe(_ => Console.WriteLine("one"));
io.Subscribe(_ => Console.WriteLine("two"));

↑ Subscribeまでの間に、共通の条件を突っ込みました。この場合、クリック1回で”do”は何回表示されるでしょうか?
結果は、2回です。ということはCondition()の評価は2回行われてるんですね。これはあまりうれしくない。

1回で済ます方法はないんでしょうか?(教えて偉い人)
# イメージ的にはIE.ToList()なのりで出来そうなのですが…

2件のコメント »

  1. […] → 第1回、第2回 […]

    ピンバック by ReactivePropertyを使いたい人のための、ReactiveExtensions入門(その3) | 泥庭 — 2014年7月1日 @ 10:24 PM

  2. […] 以前のバージョンは→第1回、第2回、第3回 […]

    ピンバック by ReactivePropertyを使いたい人のための、ReactiveExtensions入門(その4) | 泥庭 — 2014年7月27日 @ 11:45 AM


RSS feed for comments on this post. TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

WordPress.com で無料サイトやブログを作成.

%d人のブロガーが「いいね」をつけました。