Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using NoContact.Interfaces;
- using NoContact.Helpers;
- using System.Windows.Input;
- using NoContact.ViewModels.Base;
- using NoContact.Views;
- using System.Collections.ObjectModel;
- using System.Windows;
- using System.Windows.Controls;
- using GalaSoft.MvvmLight.Command;
- using System.Reactive.Linq;
- using Reactive.Bindings;
- namespace NoContact.ViewModels
- {
- public class PhoneWindowViewModel : BindableBase, IPhoneWindowViewModel
- {
- private IWindowManager _windowManager;
- private IViewFactory _viewFactory;
- private ObservableCollection<IReminderBoxViewModel> _reminders;
- public PhoneWindowViewModel(IWindowManager windowManager, IViewFactory viewFactory)
- {
- _windowManager = windowManager;
- _viewFactory = viewFactory;
- _reminders = new ObservableCollection<IReminderBoxViewModel>();
- SearchText = new ReactiveProperty<string>();
- ItemsSource = new ReactiveCollection<ReminderBoxViewModel>();
- IObservable<IEnumerable<ReminderBoxViewModel>> searchedStrings = SearchText.
- Where(x => !string.IsNullOrEmpty(x)).
- Throttle(TimeSpan.FromSeconds(1)).
- DistinctUntilChanged().
- Select(SearchForText).
- Switch();
- searchedStrings.Subscribe(x => UpdateUI(x));
- SearchText.Value = "momma";
- }
- public ICommand ReminderBoxCloseCommand { get { return new RelayCommand<ReminderBoxViewModel>(CloseReminderBox); } }
- public ICommand AddReminderCommand { get { return new RelayCommand(AddReminder, () => true); } }
- private ReactiveCollection<ReminderBoxViewModel> _itemsSource;
- public ReactiveCollection<ReminderBoxViewModel> ItemsSource
- {
- get { return _itemsSource; }
- set
- {
- _itemsSource = value;
- OnPropertyChanged();
- }
- }
- private ReactiveProperty<string> _searchText;
- public ReactiveProperty<string> SearchText
- {
- get { return _searchText; }
- set
- {
- _searchText = value;
- OnPropertyChanged();
- MessageBox.Show(_searchText.Value);
- }
- }
- public ObservableCollection<IReminderBoxViewModel> Reminders
- {
- get { return _reminders; }
- set
- {
- _reminders = value;
- OnPropertyChanged();
- }
- }
- /// <summary>
- /// Delegates closing the window, associated with
- /// this ViewModel instance.
- /// </summary>
- private void CloseWindow()
- {
- _windowManager.CloseWindow(this);
- }
- /// <summary>
- /// "Closes" the Reminder Box by deleting it from the Collection
- /// </summary>
- private void CloseReminderBox(IReminderBoxViewModel viewModel)
- {
- var index = Reminders.IndexOf(viewModel);
- Reminders.Remove(viewModel);
- }
- /// <summary>
- /// Adds the reminder to the Collection by resolving it in the
- /// abstract typed factory facility.
- /// </summary>
- private void AddReminder()
- {
- var viewModel = _viewFactory.Create<IReminderBoxViewModel>();
- Reminders.Add(viewModel);
- _viewFactory.Release(viewModel);
- }
- private async Task<IEnumerable<ReminderBoxViewModel>> SearchForText(string searchedText)
- {
- return await Task.FromResult(Enumerable.Range(1, 100).Select(x => new ReminderBoxViewModel()));
- }
- private void UpdateUI(IEnumerable<ReminderBoxViewModel> viewModelCollection)
- {
- ItemsSource.AddRangeOnScheduler(viewModelCollection);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment