Esempio n. 1
0
        // コンストラクタ

        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);
        }