Exemple #1
0
        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;
        }
Exemple #3
0
        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();
        }