public HohoemaListingPageViewModelBase(HohoemaApp app, PageManager pageManager, bool useDefaultPageTitle = true) : base(app, pageManager, useDefaultPageTitle: useDefaultPageTitle) { NowLoadingItems = new ReactiveProperty <bool>(true) .AddTo(_CompositeDisposable); SelectedItems = new ObservableCollection <ITEM_VM>(); HasItem = new ReactiveProperty <bool>(false); HasError = new ReactiveProperty <bool>(false); ListViewVerticalOffset = new ReactiveProperty <double>(0.0) .AddTo(_CompositeDisposable); _LastListViewOffset = 0; MaxItemsCount = new ReactiveProperty <int>(0) .AddTo(_CompositeDisposable); LoadedItemsCount = new ReactiveProperty <int>(0) .AddTo(_CompositeDisposable); SelectedItemsCount = SelectedItems.ObserveProperty(x => x.Count) .ToReactiveProperty(0) .AddTo(_CompositeDisposable); IsItemSelected = SelectedItems.ObserveProperty(x => x.Count) .Select(x => x > 0) .ToReactiveProperty() .AddTo(_CompositeDisposable); NowRefreshable = new ReactiveProperty <bool>(false); // 複数選択モード IsSelectionModeEnable = new ReactiveProperty <bool>(false) .AddTo(_CompositeDisposable); IsSelectionModeEnable.Where(x => !x) .Subscribe(x => ClearSelection()) .AddTo(_CompositeDisposable); // 複数選択モードによって再生コマンドの呼び出しを制御する SelectItemCommand = IsSelectionModeEnable .Select(x => !x) .ToReactiveCommand <object>() .AddTo(_CompositeDisposable); SelectItemCommand.Subscribe(item => { HohoemaListingPageItemBase clicekdItem = null; if (item is ItemClickEventArgs) { var args = item as ItemClickEventArgs; if (args?.ClickedItem is HohoemaListingPageItemBase) { clicekdItem = args.ClickedItem as HohoemaListingPageItemBase; } } else if (item is HohoemaListingPageItemBase) { clicekdItem = item as HohoemaListingPageItemBase; } if (clicekdItem?.PrimaryCommand.CanExecute(null) ?? false) { clicekdItem.PrimaryCommand.Execute(null); } }) .AddTo(_CompositeDisposable); var SelectionItemsChanged = SelectedItems.ToCollectionChanged().ToUnit(); /* * SelectionItemsChanged.Subscribe(_ => * { * if (!IsSelectionModeEnable.Value) * { * var item = SelectedItems.FirstOrDefault(); * if (item != null) * { * if (item.PrimaryCommand.CanExecute(null)) * { * item.PrimaryCommand.Execute(null); * } * } * } * }); */ #if DEBUG SelectedItems.CollectionChangedAsObservable() .Subscribe(x => { Debug.WriteLine("Selected Count: " + SelectedItems.Count); }); #endif // 読み込み厨または選択中はソートを変更できない CanChangeSort = Observable.CombineLatest( NowLoadingItems, IsSelectionModeEnable ) .Select(x => !x.Any(y => y)) .ToReactiveProperty(); }