Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ReactiveUI: Rx + MVVM

5,042 views

Published on

Published in: Engineering, Sports, Technology
  • Dating for everyone is here: ♥♥♥ http://bit.ly/2F7hN3u ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating direct: ♥♥♥ http://bit.ly/2F7hN3u ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • спасибо, благодарю за ссылку
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • @antoxazimm Александр Соловьев — Functional Reactive Programming & ClojureScript http://www.youtube.com/watch?v=R4sTvHXkToQ
    Наслаждайся)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • привет, ты советовл посмотреть выступление со второго слада твоей презентации, подскажи кто выступает и что за тема?
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

ReactiveUI: Rx + MVVM

  1. 1. Reactive UI Reactive Extensions + MVVM
  2. 2. Rx.NET publicinterfaceIObservable<outT> { IDisposableSubscribe(IObserver<T>observer); } publicinterfaceIObserver<inT> { voidOnNext(Tvalue); voidOnError(Exceptionerror); voidOnCompleted(); }
  3. 3. WP8 WinRT Xamarin.Android Xamarin.Touch Xamarin.Mac WPF WinForms
  4. 4. Reactive Extensions + MVVM IObservable и LINQ + INPC, INCC TextBox.TextChanged, ManipulationStartedEvent етц. изменения значения Binding ICommand вызовы, CanExecuteChanged Frame.Navigated, App.IsResuming етц. тестируемый параллелизм (concurrency)
  5. 5. ReactiveObject publicclassVM:ReactiveObject{ publicVM(){ this.WhenAnyValue(x=>x.Name) .Select(x=>x.Split( '')[0]) .ToProperty( this,x=>x.FirstName); } publicstringFirstName{get;privateset;} }
  6. 6. Декларативный стиль свойство FirstName это подстрока Name до пробела свойство BackgroundBrush это свойства Red, Green, Blue, объединенные в объект Color, трансформированный в SolidColorBrush Кнопка Login может быть нажата если свойства пароль и подтверждение пароля непусты и совпадают
  7. 7. Output Properties this.WhenAny(x=>x.Red,x=>x.Green,x=>x.Blue, (r,g,b)=>Color.FromRgb(r.Value,g.Value,b.Value)) .Select(color=>newSolidColorBrush(color)) .ToProperty(this,x=>x.BackgroundBrush); publicSolidColorBrushBackgroundBrush{get;privateset;}
  8. 8. Events пример AutoComplete сценария varsearchTerms=txt.Events().TextChanged .Select(_=>txt.Text) .Where(term=>term.Length> 3) .Throttle(TimeSpan.FromSeconds( 1) .DistinctUntilChanged(); varsearchResults=fromterminsearchTerms fromwordsin_service.Search(term).TakeUntil(searchTerm selectwords; searchResults.ObserveOnDispatcher() .Subscribe(words=>itemsControl.ItemsSource=words)
  9. 9. Commands CanExecute via IObservable varcommandCanExecute=newSubject<bool>(); varcommand=newReactiveCommand(commandCanExecute); commandCanExecute.OnNext(false); command.CanExecute(null); >>>false commandCanExecute.OnNext(true); command.CanExecute(null); >>>true </bool>
  10. 10. Async action per Command execute LoadUsersAndAvatars=newReactiveCommand(); varusersAndAvatarResults=LoadUsersAndAvatars.RegisterAsyncTask(async_=> varusers=awaitLoadUsers(); foreach(varuinusers){ u.Avatar=awaitLoadAvatar(u.Id); } returnusers; }); usersAndAvatarResults.ToProperty(this,x=>x.Users,refusers);
  11. 11. Bindings in code- behind C# более экспрессивен, нежели XAML this.OneWayBind(ViewModel,x=>x.Name,x=>x.Name.Text); this.Bind(ViewModel,x=>x.Name,x=>x.Name.Text); //BindtheOKcommandtothebutton this.BindCommand(ViewModel,x=>x.OkCommand,x=>x.OkButton); //BindtheOKcommandtowhentheuserpressesakey this.BindCommand(ViewModel,x=>x.OkCommand,x=>x.RootView,"KeyUp");
  12. 12. INCC, ReactiveList IObservable => (selector, filter, orderer) => INCC this.Feeds=feedModels.CreateCollection() .CreateDerivedCollection( CreateViewModel, model=>model.LatestPublished>TimeBorder, FreshFirstOrderer);
  13. 13. IScheduler В Rx все асинхронные действия происходят с помощью IScheduler varinitialDate=DateTime.Now; //simulatesomecolddatabeforeViewModelcreation(andsubscription) testPodcastsSubj.OnNext(newTestPodcastItem(1,initialDate.AddDays(1))); testPodcastsSubj.OnNext(newTestPodcastItem(2,initialDate.AddDays(2))); varmodel=newFeedViewModel("TestFeed",testPodcasts); Assert.AreEqual(2,((TestPodcastItem)model.LastFeedItem).Id); Assert.AreEqual(2,model.Items.Count); testPodcastsSubj.OnNext(newTestPodcastItem(3,initialDate.AddDays(3))); _virtualScheduler.AdvanceBy(TimeSpan.FromSeconds(1)); Assert.AreEqual(3,((TestPodcastItem)model.LastFeedItem).Id);
  14. 14. Спасибо за внимание! Сабж: ReactieUI его автор: Паша Betts и я, Стас Шуша https://github.com/reactiveui https://github.com/paulcbetts Viber: +375298745697

×