かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

ReactivePropertyが楽しい その2

前書いたのだと、毎回毎回内容をクリアしてるのでReactiveCollectionのうまみがほとんどないよね!ということなので、初期化して読み込みと続きのデータを読み込むとかいう例を書いてみました。参照設定とかネームスペースの設定さえしておけばLINQ Padでさくっと動くのも素晴らしいですね。

// 初期化して読み込む
var load = new ReactiveCommand();
// 続きを読み込む
var loadNext = new ReactiveCommand();
// 結果をためておくコレクション
var collection = default(ReactiveCollection<string>);


collection = Observable
    .Merge(
        load.Do(_ => collection.Clear()), // loadコマンドはコレクションをクリアして続きの処理をやる
        loadNext) // loadNextはコレクションはいじらずに続きの処理をやる
    .Select(_ => Enumerable.Range(1, 5).ToObservable()) // データとって
    .Switch()
    .Select(i => string.Format("{0}歳", i)) // 加工して
    .ToReactiveCollection(); // コレクションにするよ

// 初期状態の出力
collection.Dump();

// 最初の読み込み
load.Execute(null);
collection.Dump();

// 続きのデータの読み込み
loadNext.Execute(null);
collection.Dump();

// データを初期化して読み込み
load.Execute(null);
collection.Dump();

実行結果は以下のような感じ。

# 実行結果 #で始まる行は私が追記してます
# 初期状態では0件
ReactiveCollection<String> (0 items) 

# loadコマンドを実行すると5件読み込まれる
5ReactiveCollection<String> (5 items)  
1歳
2歳
3歳
4歳
5歳
 
# loadNextコマンドを実行するとつづけて5件読み込まれる
5ReactiveCollection<String> (10 items)  
1歳
2歳
3歳
4歳
5歳
1歳
2歳
3歳
4歳
5歳
 
# loadコマンドを実行すると中身がクリアされてデータが読み込まれる
5ReactiveCollection<String> (5 items)  
1歳
2歳
3歳
4歳
5歳

パズル組んでるみたいで楽しいですね!