protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress <ServiceProgressData> progress) { Instance = this; await base.InitializeAsync(cancellationToken, progress); var commandService = await GetServiceAsync(typeof(IMenuCommandService)) as OleMenuCommandService; await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); NavigationListCommand.Initialize(this, commandService); FunctionListCommand.Initialize(this, commandService); ClearSearchFieldCommand.Initialize(this, commandService); SelectItemCommand.Initialize(this, commandService); ShowHideLineNumberCommand.Initialize(this, commandService); InstructionSetSelector.Initialize(commandService); }
public ListViewModel(IListModel <DataModelType> model, IViewModelCreator <DataModelType, DataViewModelType, DataDetailViewModelType> creator, IItemModelAdapterCreator <DataModelType> itemModelCreator) { if (creator == null) { throw new ArgumentNullException("creator can't be null"); } _creator = creator; if (itemModelCreator == null) { throw new ArgumentNullException("itemModelCreator can't be null"); } _itemModelCreator = itemModelCreator; if (model == null) { throw new ArgumentNullException("model can't be null"); } _model = model; _model.Updated += OnUpdate; var itemViewModels = GetItemViewModels(_model.GetItems()); UpdateList(itemViewModels); AddItemCommand = new AddItemCommand <DataModelType, DataViewModelType, DataDetailViewModelType>(this); DeleteItemCommand = new DeleteItemCommand <DataModelType, DataViewModelType, DataDetailViewModelType>(this); EditListCommand = new EditListCommand <DataModelType, DataViewModelType, DataDetailViewModelType>(this); SaveListCommand = new SaveListCommand <DataModelType, DataViewModelType, DataDetailViewModelType>(this); SelectItemCommand = new SelectItemCommand <DataModelType, DataViewModelType, DataDetailViewModelType>(this); UpdateListCommand = new UpdateListCommand <DataModelType, DataViewModelType, DataDetailViewModelType>(this); addedAndDelatedItems = new Dictionary <IItemModelAdapter <DataModelType>, ChangeStatus>(); IsSaved = true; }
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(); }