public static async Task<LogTimeEntriesViewModel> Init ()
 {
     var vm = new LogTimeEntriesViewModel ();
     await vm.SyncModel ();
     vm.SyncCollectionView ();
     return vm;
 }
        public void SetViewModel (LogTimeEntriesViewModel viewModel)
        {
            ViewModel = viewModel;

            // TODO: investigate why WhenSourceChanges doesn't work. :(
            isRunningBinding = this.SetBinding (() => ViewModel.IsTimeEntryRunning, () => IsRunning);
            durationBinding = this.SetBinding (() => ViewModel.Duration, () => DurationTextView.Text);
            descBinding = this.SetBinding (() => ViewModel.Description, () => DescriptionTextView.Text)
                          .ConvertSourceToTarget (desc => desc != string.Empty ? desc : activity.ApplicationContext.Resources.GetText (Resource.String.TimerComponentNoDescription));
            projectBinding = this.SetBinding (() => ViewModel.ProjectName, () => ProjectTextView.Text)
                             .ConvertSourceToTarget (proj => proj != string.Empty ? proj : activity.ApplicationContext.Resources.GetText (Resource.String.TimerComponentNoProject));
        }
        public async override void OnViewCreated (View view, Bundle savedInstanceState)
        {
            base.OnViewCreated (view, savedInstanceState);
            ViewModel = new LogTimeEntriesViewModel ();
            await ViewModel.Init ();

            hasMoreBinding = this.SetBinding (
                                 ()=> ViewModel.HasMore)
                             .WhenSourceChanges (ShowEmptyState);

            collectionBinding = this.SetBinding (
                                    ()=> ViewModel.CollectionView)
            .WhenSourceChanges (() => {
                logAdapter = new LogTimeEntriesAdapter (recyclerView, ViewModel.CollectionView);
                recyclerView.SetAdapter (logAdapter);
            });

            fabBinding = this.SetBinding (
                             () => ViewModel.IsTimeEntryRunning,
                             () => StartStopBtn.ButtonAction)
                         .ConvertSourceToTarget (isRunning => isRunning ? FABButtonState.Stop : FABButtonState.Start);

            StartStopBtn.Click += StartStopClick;
        }
 public static LogTimeEntriesViewModel Init ()
 {
     var vm = new LogTimeEntriesViewModel ();
     return vm;
 }
 public ScrollListener (LinearLayoutManager linearLayoutManager, LogTimeEntriesViewModel viewModel)
 {
     this.linearLayoutManager = linearLayoutManager;
     this.viewModel = viewModel;
 }
        private void SetupRecyclerView (LogTimeEntriesViewModel viewModel)
        {
            // Touch listeners.
            itemTouchListener = new ItemTouchListener (recyclerView, this);
            recyclerView.AddOnItemTouchListener (itemTouchListener);

            // Scroll listener
            recyclerView.AddOnScrollListener (
                new ScrollListener ((LinearLayoutManager)recyclerView.GetLayoutManager (), viewModel));

            var touchCallback = new SwipeDismissCallback (ItemTouchHelper.Up | ItemTouchHelper.Down, ItemTouchHelper.Left, this);
            var touchHelper = new ItemTouchHelper (touchCallback);
            touchHelper.AttachToRecyclerView (recyclerView);

            // Decorations.
            dividerDecoration = new DividerItemDecoration (Activity, DividerItemDecoration.VerticalList);
            shadowDecoration = new ShadowItemDecoration (Activity);
            recyclerView.AddItemDecoration (dividerDecoration);
            recyclerView.AddItemDecoration (shadowDecoration);
            recyclerView.GetItemAnimator ().SupportsChangeAnimations = false;
        }
        public static LogTimeEntriesViewModel Init()
        {
            var vm = new LogTimeEntriesViewModel();

            return(vm);
        }
        public async override void OnViewCreated (View view, Bundle savedInstanceState)
        {
            base.OnViewCreated (view, savedInstanceState);
            viewModel = new LogTimeEntriesViewModel ();
            await viewModel.Init ();

            binding = Binding.Create (() =>
                                      HasMore == viewModel.CollectionView.HasMore &&
                                      ItemCount == viewModel.ItemCount &&
                                      CollectionView == viewModel.CollectionView &&
                                      IsRunning == viewModel.IsTimeEntryRunning);

            startStopBtn.Click += async (sender, e) => await viewModel.StartStopTimeEntry ();
        }