// コンストラクタ public CardPanelViewModel(IEventAggregator eventAggregator, AccountManager accountManager, LoggingService loggingService, CardPanelModel cardPanelModel, SidePanelModel sidePanelModel) { // DI _eventAggregator = eventAggregator; _accountManager = accountManager; _loggingService = loggingService; _cardPanelModel = cardPanelModel; _sidePanelModel = sidePanelModel; // 起動時のロード //UserDatas = new ReactiveCollection<UserData>(_accountManager.Current.Followers.Take(20).ToObservable()); // ロード完了時に発生するイベント購読して現在表示しているユーザーデータのコレクションを更新する Observable.FromEvent <IEnumerable <UserData> >( handler => _cardPanelModel.LoadCompleted += handler, handler => _cardPanelModel.LoadCompleted -= handler ) .Subscribe(userData => { UserDatas = (userData ?? new List <UserData>()) .ToObservable() .ToReactiveCollection(); }) .AddTo(Disposables); // タブのIdをCardPanelModelに書き戻す TabId .PropertyChangedAsObservable() .Subscribe(_ => { _cardPanelModel.TabId = TabId.Value; }) .AddTo(Disposables); // タブが削除されたらリソースを開放する _eventAggregator .GetEvent <TabRemovedEvent>() .Subscribe(_ => Disposables.Dispose(), ThreadOption.PublisherThread, false, tabRemovedEventArgs => tabRemovedEventArgs.TabId == TabId.Value) .AddTo(Disposables); }