ReactiveUI

An advanced, composable, functional reactive model-view-viewmodel framework for all .NET platforms that is inspired by functional reactive programming. ReactiveUI allows you to abstract mutable state away from your user interfaces, express the idea around a feature in one readable place and improve the testability of your application.

MIT License

Stars
7.9K
Committers
193

Bot releases are hidden (Show)

ReactiveUI - 9.17.9

Published by glennawatson over 5 years ago

ReactiveUI - 9.12.1

Published by glennawatson over 5 years ago

What's Changed

  • housekeeping: Upgraded Xamarin.Forms to v3.5 (#1965) @RLittlesII
  • housekeeping: Update the event generator to use latest Xamarin.Essentials 1.0.1 (#1966) @glennawatson
  • housekeeping: Added ReactiveUI.Validation section in README. (#1968) @alexmartinezm
  • housekeeping: Now use azure templates to keep builds consistent (#1954) @glennawatson
  • housekeeping: Update to Splat v7 (#1976) @glennawatson
  • housekeeping: Update cinephile (#1973) @giusepe
  • housekeeping: Mention Routing, shorten validation docs in README (#1974) @worldbeater
  • housekeeping: Now use azure templates to keep builds consistent (#1954) @glennawatson
ReactiveUI - 8.0.1

Published by ghuntley over 6 years ago

Elijah Reva noticed a net461 regression that affected Windows Presentation Foundation and Windows Forms. During the netstandard refactor we missed renaming a compilation symbol which resulted in PropertyChangedEventManager.DeliverEvent being used when setting reactive properties. WeakEventManager should not be used on these platforms and this hotfix disables it.

Thank you Elijah for sending in this the hotfix - check your email for an invitation to the GitHub organization!

As part of this release we had 8 commits which resulted in 3 issues being closed.

Windows Forms

  • #1620 fix: disable WeakEventManager for net461 build (#1617)

Windows Presentation Foundation

  • #1620 fix: disable WeakEventManager for net461 build (#1617)

Housekeeping

  • #1626 housekeeping: resolve broken build due to NET45 compilation symbol
  • #1625 housekeeping: pin xamarin.forms version used by eventbuilder

Where to get it

You can download this release from nuget.org

ReactiveUI - 8.0.0

Published by ghuntley over 6 years ago

Hello ;-)

We never want to do a release this big ever again. A lot of time and effort went into this release from dedicated folks in the community.

One of the biggest factors in this release was that Microsoft changed their toolchain three times over and ReactiveUI was in the centre of that change. Dear Microsoft, never again please. We're happy with the end result however please take a peek out how the source code of ReactiveUI is now structured on the fileystem and how we multi-target multiple platforms using single projects and Directory.build.prop. Life for maintainers that target multiple platforms with dotnet is much better now than ever before. We were able to eliminate so much msbuild technical debt.

Big thank-you to Olly Levett who did the bulk of the conversion. Mate - you are like Mike Rowe - you did the dirty job and if you take a peek at Prism, MvvmCross and other upcoming projects you'll see that they followed your lead. Be proud of what you have accomplished.

Play Video

Thank-you to Oren Novotony for your guidance, Immo Landwerth for your educational guidance on netstandard and David Kean who helped immensely with troubleshooting Visual Studio 2017 stability problems we encountered way back in the early days during this time of epic change. Rob Relyea please keep the communication channels open with the community because how we release software will be changing within the next month or so to a continuous delivery model. The ReactiveUI community has grown, we have new maintainers and our testing automation has matured to a point where will be releasing faster from this point onwards because we can. Consumers of ReactiveUI will no longer need to use our MyGet feed.

ICYMI - At MVP Summit, the community met with Microsoft and with their support and encouragement we forked control of System.Reactive. Head on over to this blog post for specifics as to what this means for the future of Reactive Programming on .NET.

You may or may not know this but ReactiveUI is maintained by unpaid volunteers. We put up a big marketing front but at its core is a couple of passionate folks. Open-source as it is today is unbalanced and broken. If you’re relying on open-source software for your business and you haven’t secured your supply chain, you’re negligent. For the longest time the software industry has talked about open-source software in the terms of user freedom, but we have never stopped to think about the cost. The cost is too high. Lana Montgomery, thank-you for sponsoring Geoff's attendance to LinuxConfAu where it was confirmed that this is indeed a cross ecosystem and industry wide concern.

Play Video

It has been amazing and humbling experience seeing other maintainers of dotnet projects also come to the same realisation as us. Due to their observations they are now implementing measures to restore the imbalance of open-source software. For any maintainers still on the fence about this topic please open a conversation with us on our slack channel and we'll share with you ideas and guide you through your setup. ReactiveUI is now a vibrant community of developers from 22 timezones that supports the projects they depend on. Reactive programming in .NET is now financially subsidised to the tune of $7,580USD per year by community crowdsourcing and corporate sponsorship. We are on track to exceed $10,000USD by the end of 2018.

Thank-you to our backers who are making sustainable open-source a reality:

Thank-you to every single person who shipped a pull-request into this release.

  • Alexey Zimarev
  • Benjamin Tam
  • Damien Doumer Tohin
  • David Nelson
  • Dominik Mydlil
  • Geoffrey Huntley
  • Giusepe Casagrande
  • Glenn Watson
  • Grzegorz Kotfis
  • Jeremy Koritzinsky
  • Jon Stødle
  • Kent Boogaart
  • Martin Björkström
  • Olly Levett
  • Oren Novotny
  • Robert
  • Rodney Littles II
  • Shane Neuville
  • Stefan Moonen
  • Taylor Buchanan
  • Tim Jones

If you can't (or won't) help out financially, then please donate your time. Join the conversation over at https://reactiveui.net/slack and ask how you can help. Thanks for any support you can offer if you decide to - Geoffrey Huntley

New Features

We kept getting reports from folks who want to contribute to the project but their employer has a restrictive list of pre-approved licenses and MSPL isn't on that list. So what if we enabled those to help us? It would be much easier than making them go through internal corporate bs. So that's what we have done - ReactiveUI is now available under the MIT licence. This means we are now fully compatible with the GPL and are in alignment with .NET Core, CoreCLR, CoreFX, Roslyn and Xamarin Forms.

This is the first release of ReactiveUI since joining the .NET foundation. It contains security features that allow you to verify the authenticity of assemblies provided by us.

This is a housekeeping release to ensure that ReactiveUI is in a good position going forward. We have removed a massive amount of maintainer technical debt. The public API surface of ReactiveUI has not regressed in any way and we added automatic tests that validate this as part of the release. We will be adding additional features such as automated on-device, end-to-end integration tests in the coming months to make the source more accessible and safer for folks to contribute to the project.

We have added netcoreapp20 as a supported platform. You can use ReactiveUI on the server-side. Maintainers are super excited about the future of WebAssembly and it allows you to unit test ReactiveUI using dotnet core unit test libraries.

We also fixed that niggling problem that prevented folks from writing unit tests for ReactiveUI applications using Visual Studio for Mac.

Upgrading

This is a big release so it's up to you to decide when it is best for you to upgrade. We don't recommend holding off on upgrading because of changes in the .NET toolchain. It is now impossible to compile previous releases below this release. Know that the maintainers and community of ReactiveUI have been running 183 editions of alpha releases in production over the last eight months. Yesterday we went through and manually tested every platform and are only weeks away from adding full end-to-end regression tests. To us, it's risker to hold off upgrading - we recommend that if you haven't started your netstandard upgrade spike that you do it so now. The longer you hold off on the upgrade the more pain you will experience consuming opensource in the post netstandard world.

When you install ReactiveUI we will bring in the correct version of System.Reactive (currently 3.11) as part of installation as a transitive reference. You'll need to manually remove/upgrade all references to the Reactive Extensions that are below 3.11 that aren't netstandard. Do not attempt to do binding redirects from 2.x to 3.x series. It won't work. It's not worth it. You'll end up with nothing but being unhappy and have a wasted afternoon.

ReactiveUI is now netstandard20 compatible. We have dropped support for portable class libraries. You may be able to install netstandard20 into your portable class library but both Microsoft and the maintainers of ReactiveUI strongly recommend against doing this as you'll be fighting an uphill battle. The correct path to take is File -> New -> Netstandard library and drag your code into the new project. Then install the netstandard compatible versions of any dependencies that you have.

The first thing you'll notice after creating your netstandard20 class libraries is that the name of the ReactiveUI packages on NuGet have subtly changed. Instead of using - we now use . in our package names. We did this because it allows the maintainers to reserve the namespace of ReactiveUI on NuGet and provide you guarantees that if it's in the ReactiveUI.* namespace then it is an official package that was produced by us. Look for the Blue Tick (tm). The documentation has been updated with instructions of which packages you should install on each platform.

If you target the WPF platform you now need to install the WPF specific package otherwise schedulers won't be wired up and you'll be greeted with an appropriate exception. The documentation has been updated. We had to make this change prevent Visual Studio for Mac from exploding when it encountered an automatically imported reference to Windows.Presentation which prevented these folks from being able to unit test their applications with Visual Studio for Mac.

The .NET toolchain has evolved quite a bit over the last year which provided an excellent opportunity to remove legacy platforms such as Silverlight and Windows Phone 8.x.

ReactiveUI now uses monoandroid80 as the minsdk but you'll be able to target earlier versions of android by specifying the targetsdk compilation option.

The minimum version of .NET framework is now net461 which means you'll need to adjust your unit test projects and WinForms/WPF applications. We chose net461 as it's in alignment with Microsoft's official support policy and net461 is now the default option provided in Visual Studio 2017 when scaffolding File -> New Project.

The minimum version of UWP is now 10.0.16299 aka Fall Creators Update. The maintainers picked this as it felt like a reasonable baseline to us and it helps reduce the amount of SDK's one needs to have installed to be contribute to ReactiveUI. If you need to target anything earlier than this then you will need to compile from source. It's as simple as Right Click -> Change Target -> Compile.

The minimum version of Xamarin forms is now 2.5.1.444934. We picked this because it was the latest version available on NuGet when we were publishing the release. If you need to target an older version then you will need to compile from source.

Detailed release notes

As part of this release we had 138 commits which resulted in 113 issues being closed.

All Platforms

  • #1530 housekeeping: use new nuget package names to enable nuget namespace reservation
  • #1522 feature: nameof() overload for ObservableAsPropertyHelper mixin
  • #1498 ReactiveCommand in current 8.0 alpha concurrency problem
  • #1476 InvokeCommand not executed in v8 where v7.4 would
  • #1472 test: use new threads explicitly in message bus test
  • #1461 feature: add approval tests
  • #1456 fix: added netstandard 1.1 build and added clamped system.reactive references
  • #1444 feature: add code snippets for VS, VS4Mac and Rider
  • #1441 core: make ViewContractAttribute.Contract public
  • #1440 Make ViewContractAttribute.Contract public
  • #1439 chore: remove legacy code
  • #1426 housekeeping: added identity signing to NuGet packages
  • #1425 chore: remove SILVERLIGHT #ifdefs
  • #1423 chore: cull Splat methods that were never removed
  • #1416 chore: use pre-release visual studio 2017 sdk to work around tooling issues
  • #1394 chore: tidy up comments in ReactiveNotifyPropertyChangedMixins
  • #1392 test: add additional unit test to cover Activation returning IDisposable
  • #1391 chore: update comments in ReactiveCommand
  • #1390 chore: update logging mixing XML comments
  • #1389 Tidy up comments in legacy ReactiveCommand
  • #1367 fix: pin child packages of our main project be locked to the version that's being built
  • #1355 chore: split platform registrations into platform specific files
  • #1327 First pass at updating to VS2017 csproj file
  • #1304 [Bug] CS1701 / CS1702 System.Runtime reference mismatch
  • #1190 .NETStandard support?
  • #1139 Reference Rx 3.0.0 NuGet packages
  • #780 Running Unit Tests under Xamarin Studio without Xam.Mac

Events Generator

  • #1529 fix: this.Events() was not available for consumption due to assembly name conflicts
  • #1526 reactiveui-events not working for platform projects possibly related to PackageReference style projects
  • #1514 feat: propagate obsolete attributes to generated observables
  • #1495 reactive-ui events doesn't have the WPF target anymore in 8.0 alpha 89
  • #1371 housekeeping: only include events source if present
  • #1359 fix: split xamarin forms events BACK into seperate package to prevent future targeting conflicts

Windows Forms

  • #1462 chore: fix xml doc on ReactiveDerivedBindingListMixins

Universal Windows Platform

  • #1452 fix: set UWP min version to 10.0.10586.0

Windows Presentation Foundation

  • #1556 fix: include xml docs in WPF package
  • #1504 reactiveui-wpf.csproj triggers defect/crash in visual studio for windows when opening reactiveui.sln
  • #1450 fix: min platform should be net452; was net452 before migration to new csproj format
  • #1433 fix: remove duplicate ComponentModelTypeConverter
  • #1427 fix: include theme in Reactive.Wpf
  • #1424 The themes directory hasn't been included in reactiveui-wpf so the templates don't resolve
  • #1406 feature: move wpf out of main package to fix unit testing story on mono and unblock other ui frameworks

Xamarin Android

  • #1589 fix: runtime API check for the Android time picker (#1233)
  • #1519 feature: target monoandroid80 instead of monoandroid70 and upgraded to 26.1.0.1 support lib
  • #1517 VS2017 15.4 issues
  • #1496 feature: added ctors for JNI ownership transfer in ReactiveAppCompatActivity

Xamarin Forms

  • #1493 feature: bumped to xamarin forms 2.4

Xamarin iOS

  • #1485 [iOS] Circular dependency detected 'reactiveui 8.0.0-alpha0089 => System.Reactive 3.1.1 => System.Reactive.PlatformServices 4.0.0-preview00001 => System.Reactive 3.1.1'.
  • #1437 Changed to add pending changes all at the same starting index when using RemoveRange
  • #1405 Raise ViewWillAppear for child even if parent is already visible
  • #1303 Removed all obsolete UNIFIED symbol checks

Housekeeping

  • #1606 housekeeping: fix configuration for tizen

  • #1594 chore: use same vs2017 appveyor image for master and develop

  • #1591 docs: add details about developer environment set up

  • #1587 househeeping: resolve broken CI infrastructure

  • #1579 fix: use netstandard 2.0 compatible version of splat

  • #1568 fix ReactiveUI nuget dependency not being pinned correctly

  • #1563 Add .idea to gitignore to simplify use of JetBrains Rider

  • #1554 chore: fix build

  • #1535 build.cake fails if the pwd contains spaces

  • #1532 housekeeping: compile csproj with multiple target frameworks in parallel

  • #1524 housekeeping: remove fully qualified test names in test explorer (#1328)

  • #1518 housekeeping: github has spoken this is the new convention

  • #1515 Add git hash to nuget package / assembly info

  • #1511 housekeeping: net45 legacy project with CPS workaround

  • #1500 housekeeping: the f in wpf is foundation, not framework

  • #1497 housekeeping: fixed broken link to stackoverflow

  • #1490 housekeeping: upload msbuild binlogs even when the build fails

  • #1489 housekeeping: remove && exit 0

  • #1483 housekeeping: specify cake version in bootstrap script

  • #1482 housekeeping: pinned Cake 0.21.0 and tools/addins to current version

  • #1479 housekeeping: move the code of conduct to the website

  • #1478 housekeeping: cleanup of readme, contributing guide, pull-request template, coc, license

  • #1475 housekeeping: copy API approval results to appveyor so maintainers don't need to re-run builds

  • #1474 Cake.PinNuGetDepenencies needs upgrading to Cake 0.22 soon or our builds will break

  • #1471 Build status badge is out of date

  • #1470 Remove build.sh

  • #1469 Update CONTRIBUTING.md to reference 'develop' branch instead of 'master'

  • #1468 housekeeping: don't autoclose dx issues or cx issues

  • #1458 housekeeping: improve stability of CI when re-running a failed build

  • #1454 housekeeping: add license to nuget package

  • #1449 housekeeping: SignPackages throws an exception when it fails

  • #1448 housekeeping: ¯_(ツ)_/¯ and proposal labels won't be autoclosed

  • #1446 housekeeping: upgrade MSBuild.Sdk.Extras

  • #1443 Set TargetPlatformMinVer

  • #1442 housekeeping: update to MSBuild.Sdk.Extras 1.0.9

  • #1436 housekeeping: merged probot message into single line

  • #1435 housekeeping: automatically close stale github issues in a friendly way

  • #1432 housekeeping update ISSUE_TEMPLATE to match website

  • #1431 SignPackages does not throw exception when it fails

  • #1430 housekeeping: ignore cla github labels otherwise release will break

  • #1420 MSB4041: The default XML namespace of the project must be the MSBuild XML namespace

  • #1419 housekeeping: use .NET foundation appveyor infrastructure

  • #1414 housekeeping: nuget packaging 💄

  • #1410 housekeeping: upgraded eventbuilder to vs2017 project format

  • #1408 housekeeping: added .net foundation license headers

  • #1407 housekeeping: bumped next version to be v8

  • #1395 chore: use editorconfig in place of rebracer

  • #1373 chore: remove CommonAssemblyInfo from git

  • #1363 chore: don't publish ReactiveUI-Core as package no longer exists

  • #1358 housekeeping: github labels updated to rename uwp & wpf, drop windows phone/store, add tizen

  • #1357 housekeeping: retrieve System.Windows.Interactivity from NuGet so contributors don't need to install the SDK

  • #1328 Remove fully qualified test names in test explorer

  • #1232 Using RxUI with Rx v3.x possible?

  • #1122 reactiveui-testing v7 does not install into Profile111 (netstandard1.1)

Documentation

  • #1562 Fix default values for snippet variables in Rider
  • #1506 docs: upgraded version of xam forms and changed ondestroy to use flush instead of shutdown
  • #1502 housekeeping: let's keep cinephile as an xamarin.forms app
  • #1459 documentation: added cinephile application
  • #1457 documentation: added baseline for xamarin.forms sample application
  • #1415 Improve wording on PR template
  • #1412 chore: tweaking comments in TestUtils
  • #1204 docs: email geoff, not paul for slack invitation

Where to get it

You can download this release from nuget.org

ReactiveUI - 7.4.0

Published by ghuntley over 7 years ago

As part of this release we had 8 commits which resulted in 3 issues being closed.

All Platforms

  • #1336 fix: ViewModelViewHost memory leak
  • #1298 fix: ViewLocator can now throw null reference exceptions

Windows Phone, Store and Universal

  • #1299 fix: ViewLocator can't resolve views specified by UWP RoutedViewHost

Where to get it

You can download this release from nuget.org

ReactiveUI - 7.3.0

Published by ghuntley over 7 years ago

As part of this release we had 17 commits which resulted in 17 issues being closed.

All Platforms

  • #1325 fix: schedule output of ReactiveCommand.Execute
  • #1317 refactor: removed unused extension method and make class internal
  • #1306 refactor: use xunit IsType in unit tests

Xamarin Android

  • #1302 feature: improved exception message when there are multiple resource IDs with the same name

Xamarin Mac

  • #1259 bug: the assembly for Xamarin.Mac20 in the reactiveui-events NuGet package was not included

Housekeeping

  • #1331 housekeeping: use [email protected] for all communication
  • #1313 housekeeping: add table of contents with relative links
  • #1326 housekeeping: add backers and sponsors from Open Collective

Documentation

  • #1323 chore: tidy up ReactiveCollectionMixin xml comments
  • #1322 chore: tidy up xml comments in PropertyBinding
  • #1321 chore: tidy up xml comments in OrderedComparer
  • #1320 chore: improved ObservedChangedMixin xml documentation
  • #1319 chore: tidy up XMLDOC in ObservableAsPropertyHelper
  • #1310 chore: tidy xml documentation for AutoPersistHelpers
  • #1308 chore: tidy xml comments in RegisterableInterfaces
  • #1307 chore: tidy up xml comment
  • #1309 chore: fix xml doc referencing type with generic arguments

Where to get it

You can download this release from nuget.org

ReactiveUI - 7.2.0

Published by ghuntley over 7 years ago

As part of this release we had 34 commits which resulted in 27 issues being closed.

All Platforms

  • #1282 feat: a more flexible default view locator
  • #1261 feat: allow interaction handlers of any observable type
  • #1255 feat: add scheduling support to interactions
  • #1283 fix: add UseInvariantCultureAttribute and apply to relevant tests
  • #1274 fix: ensure synchronous command execution is lazy. Note that this is a potentially breaking change if your existing usage of synchronous commands is incorrect. See the issue for details.
  • #1247 fix: catch exceptions from InvokeCommand
  • #1244 fix: complete command execution only when pipeline completes
  • #1235 fix: InvokeCommand targets ReactiveCommandBase, not ReactiveCommand
  • #1289 perf: use shared, static observables to reduce allocations
  • #1236 perf: remove superfluous AsObservable calls in ReactiveCommand
  • #1269 test: add activation tests
  • #1268 style: tidy up and expand comments in activation code

Xamarin Android

  • #1250 feat: more flexible WireUpControls implementation

Xamarin Forms

  • #1270 feat: synchronize ViewModel and BindingContext properties
  • #1281 fix: assign VM from correct thread in RoutedViewHost

Housekeeping

  • #1180 feat: enable unit test coverage/coveralls
  • #1267 style: tidy up comments for binding code
  • #1263 chore: failing to set the appveyor version should not be a fatal build error
  • #1257 chore: resolved gitlink wasn't working because pdbs/xml were not included because of a packaging defect
  • #1252 chore: rename MobileLifecycle.cs to SuspensionHost.cs
  • #1238 chore: removed next-version definition

Documentation

  • #1243 docs: delete docs folder
  • #1198 docs: document pull-request merging guidelines/process
  • #1197 docs: document release process for contributors

Where to get it

You can download this release from nuget.org

ReactiveUI - 7.1.0

Published by ghuntley almost 8 years ago

As part of this release we had 8 commits which resulted in 4 issues being closed.

All Platforms

  • #1225 fix: reactiveui NuGet packages should be pinned and only work with packages from the same release
  • #1218 fix: subscription leakage in ReactiveCommand

Xamarin Android

  • #1217 feature: allow WireUpControls to find View members

Xamarin iOS

  • #1216 feature: added generic reactive controllers and views for iOS and Mac

Xamarin Mac

  • #1216 feature: added generic reactive controllers and views for iOS and Mac

Where to get it

You can download this release from nuget.org

ReactiveUI - 7.0.0

Published by ghuntley almost 8 years ago

Oh, hai!

Wow! It's been a while, but we have a juicy new release for you. We had to take some time to heal internally, to train and mentor the future generations of maintainers which are going to carry us forward. Additionally the .NET ecosystem changed underneath us, and we didn't have continuous integration setup. Let this be a lesson to anyone considering operating an open-source project that targets nine platforms. Have a roadmap and succession plan in place and never allow long-running branches, ever. Implement continuous integration and mature your release processes to the point where cutting a new release is as simple as pressing a button.

So what is ReactiveUI?

ReactiveUI is inspired by functional reactive programming and is the father of the ReactiveCocoa (Cocoa/Swift) framework. Internally we debate whether we are or are not a framework, as at its core the project is essentially a bunch of extension methods for the Reactive Extensions.

ReactiveUI was started seven years ago and is now old enough to attend grade school but unlike a teenager is extremely stable. ReactiveUI has matured over the years into a solid and fine choice for building your next application. Additionally, because the implementation is unopinionated migration from another framework to ReactiveUI is incredibly easy.. You can slide it in on a single ViewModel and then migrate as you become more comfortable. Avoid those costly rewrites.

When reading the code, you'll find that ReactiveUI is rather unopinionated in the implementation, but we have always held some beliefs which have been the basis and foundation of the project.

We believe that code is communication between people, that also happens to run on a computer. If you optimise for humans, then over a long time your project will end up better. Software should be understandable by other people; that is super important.

We believe that only the power of the Reactive Extensions allows you to express the idea around a feature in one readable place.

Even Miguel de Icaza agrees

Think about your typical user interface? It's a mutable bag of sadness with code all over the place. Instead of telling a computer how to do its job, why not define what the computers job is and get out of its way? If that sounds odd, let us re-introduce you to Microsoft Excel.

Instead of doing the typical ViewModel isLoading = true/false mutable dance by toggling it on and off in different branches of your code. Why not express the condition in a single place using a Microsoft Excel expression - =SUM(A1: B2)?

Still not convinced?

Maybe you need to watch this insanely smart, and eccentric guy in a tie-dye t-shirt do maths on a whiteboard:

Async/await is the zombie plague. Liberate your codebase today.

ReactiveUI is used in production at GitHub, Slack, Microsoft and is supported by consultants from different companies from all around the world. It's used at our clients, we can't name names specifically, but we encourage our community to showcase where and how they have used ReactiveUI in their applications, some members have even gone as far as open-sourcing their app and sharing their entire codebase. You are of course under no obligation to share these insights (or code) with us but it is greatly appreciated by the project maintainers, and you'll usually get a retweet out of it.

Where are the examples?

We are working on it; this release was for us. Next release is for you. For now:

Rx is hard

No, it's not. Learning Rx is one of the best things you can do to improve yourself as a software engineer. Unit testing was hard, so was dependency injection at first. The principals you learn during your journey will forever change you and best of all the knowledge is implementation and language agnostic. We have designed ReactiveUI so you can slowly transition from an async/await codebase at a pace that feels comfortable to you.

Highlights

ReactiveCommand is Better

ReactiveCommand is completely rewritten again (sorry).

  • interfaces are gone. Any use of IReactiveCommand should be replaced with ReactiveCommand, possibly with type information (see below).
  • static creation methods have changed:
    • execution logic is always required when calling CreateXxx methods, including synchronous commands (i.e. those created with Create). So rather than calling Create and then subscribing, you call Create and pass in your execution logic right then and there.
    • for consistency, the execution logic is always provided as the first parameter. Other parameters (canExecute, scheduler) are optional.
    • CreateAsyncObservable is now called CreateFromObservable.
    • CreateAsyncTask is now called CreateFromTask.
  • parameter types are formalized by TParam in ReactiveCommand<TParam, TResult>.
    • if your command takes a parameter, you no longer take an object and cast it. Instead, you explicitly specify the parameter type when creating the command (of course, you can still choose object as your TParam if that makes sense, perhaps as an intermediary migration step).
  • ICommand is now implemented explicitly. As a result:
    • the Execute exposed by ReactiveCommand is reactive (it returns IObservable<TResult>). It is therefore lazy and won't do anything unless something subscribes to it.
    • CanExecuteObservable is now called CanExecute.
  • observables such as CanExecute and IsExecuting are now behavioral. That is, they will always provide the current value to new subscribers.
  • RoutingState has been updated to use the new implementation. Consequently, any use of its commands will be affected per the above.
  • the ToCommand extension method has been removed. This was a simple convenience to take an IObservable<bool> and use it as the canExecute pipeline for a new command. If you're using ToCommand, you can just replace it with a call to one of the creation methods on ReactiveCommand.

Old:

var canExecute = ...;
var someCommand = ReactiveCommand.Create(canExecute);
someCommand.Subscribe(x => /* execution logic */);

var someAsyncCommand1 = ReactiveCommand.CreateAsyncObservable(canExecute, someObservableMethod);
var someAsyncCommand2 = ReactiveCommand.CreateAsyncTask(canExecute, someTaskMethod);

someCommand.Execute();

New:

var canExecute = ...;
var someCommand = ReactiveCommand.Create(() => /* execution logic */);

var someAsyncCommand1 = ReactiveCommand.CreateFromObservable(someObservableMethod, canExecute);
var someAsyncCommand2 = ReactiveCommand.CreateFromTask(someTaskMethod, canExecute);

someCommand.Execute().Subscribe();

For more details, please see the extensive documentation on this topic.

Note To enable you to ease into the migration, all previous types are available under the ReactiveUI.Legacy namespace. Note, however, that there is no legacy version of RoutingState, so any code you have that interacts with its command may require minor updates.

Interactions are New and Exciting

UserError has been generalized and re-imagined. We call it interactions, and we think you'll like it. We did this in part because people were feeling icky using UserError for non-error scenarios. Basically, we realized that people need a general mechanism via which a view model can ask a question, and wait for the answer. It doesn't have to be an error - we're not that pessimistic! You could be asking to confirm a file deletion, or maybe how the weather is out there in the analog world.

Migrating from UserError to the interactions infrastructure is not really a case of one-for-one substitution. But here are some tips to get you started:

  • read through the documentation first.
  • decide whether you need shared interactions and, if so, define them in an appropriate place for your application (often just a static class).
  • for any non-shared interactions, have your view model create an instance of the interaction and expose it via a property.
  • typically you want the corresponding view to handle interactions by calling one of the RegisterHandler methods on the interaction exposed by the view model.
  • the view model can call Handle on the interaction, passing in an input value.
  • Recovery commands are no longer a built-in thing. If you need such a mechanism for your interactions, you are encouraged to write an appropriate class and use it as the input for your interaction.

Note To enable you to ease into the migration, all previous types are available under the ReactiveUI.Legacy namespace.

ToProperty is now eager by default

In previous ReactiveUI versions, ToProperty was lazy. That is, it would have no effect unless something was "pulling" on the target property. This was for performance reasons, as you may have properties that are expensive to resolve, but only used in specific scenarios.

Whilst this was good for performance, it was often confusing and contrary to expectations. Therefore, ToProperty is no longer lazy - it immediately subscribes to ensure the property's value reflects the given observable pipeline. However, the original lazy behavior can be obtained by passing in true to the deferSubscription parameter.

Automation galore

A mountain of effort has gone into automating ReactiveUI's build and deployment infrastructure (thanks @ghuntley!). Using tools such as Cake, AppVeyor, and gitversion, we now have a very compelling automation story. This is no mean feat, especially considering the vast array of platforms on which ReactiveUI runs, and must therefore be built.

The end goal here is to get you, the community, new versions of ReactiveUI more rapidly and seamlessly.

Details

As part of this release we had 113 issues closed.

All Platforms

  • #1189 Add WhenAnyObservable overloads that combine latest via a given selector
  • #1161 Remove BindCommand implementation taking Func<TParam>
  • #1158 Throw UnhandledErrorException when a thrown exception goes unhandled (rather than just Exception)
  • #1157 Fix InvokeCommand to respect the command's execution window
  • #1091 Add WhenActivated overload that takes a CompositeDisposable, as well as a DisposeWith extension method
  • #971 #1035 #1054 #1085 #1088 Overhaul reactive commands
  • #1084 Enhance ToProperty to work with indexers
  • #1082 Add scheduling support to RoutingState
  • #1079 Add Activated and Deactivated observables to ViewModelActivator
  • #1061 ToProperty is no longer lazy by default
  • #964 #1055 #1181 Add interactions feature
  • #1052 Add Bind overloads that convert via Funcs
  • #1028 Improve CreateCollection overloads
  • #1021 Generalize auto-persistence helpers to work against IReactiveCollection<T>
  • #1018 BindTo now throws a helpful exception when attempting to bind to null
  • #1015 Enhance the default view locator to resolve views when the VM is abstracted as an interface
  • #1013 Add auto-registration feature for views within a given assembly
  • #1012 Add scheduler parameter to CreateCollection
  • #977 Add WhenNavigatedToObservable method, telling you whenever a given view model is on top of the navigation stack
  • #962 Fix a race condition in ObservableAsPropertyHelper
  • #938 Don't automatically create a DataTemplate if the DisplayMemberPath of an ItemsControl is set
  • #936 Ensure ObservableAsPropertyHelper provides the initial value immediately
  • #926 Remove potentially expensive hash calculation from ReactiveList
  • #914 Remove ViewContractAttribute
  • #913 Remove fallbackValue from binding methods
  • #875 Relax generic constraints on ToProperty from ReactiveObject to IReactiveObject
  • #943 Add ReactiveUserControl to relevant XAML platforms
  • #935 Add XmlnsDefinitionAttribute for those XAML platforms that support it
  • #879 Add ViewContract property to ViewModelViewHost for XAML platforms
  • #1149 Set nuspec dependency to == (exact) version as that is being built
  • #1142 Fix Splat dependency
  • #1110 Fix WaitForScheduler exception handling

Events Generator

  • #1151 reactiveui-events now targets UWP 10.0.14393.0 (aka anniversary edition)
  • #1056 eventbuilder.exe is now xplat and always uses the latest SDK's
  • #1187 Ignore CS[1591,0618,0105,0672] because that code is generated

Windows Phone, Store and Universal

  • #1192 Fixed ReactiveUI to install into a library targeting WPA81 (Profile111)
  • #1174 Retired Windows Phone Silverlight
  • #1099 Changed LaunchActivatedEventArgs to IActivatedEventArgs
  • #1045 Add Universal Windows Platform (UWP) support
  • #940 Update platform UAP 10069 -> UWP 10240, add Events and Testing projects

Xamarin Android

  • #1186 Android timepicker now uses Hour/Minute instead of CurrentHour/CurrentMinute
  • #1144 Small bug fixes to ReactiveRecyclerViewAdapter and ViewHolder
  • #1105 Add ReactiveAppCompatActivity
  • #1095 Add AsObservable when ISubject is returned as IObservable
  • #1067 Add Android reactive preferences
  • #1059 Add Rx implementation of the Android shared preferences changed
  • #1058 Add Rx implementation of the Android USB permission request
  • #1057 Add Rx implementation of the Android service bind
  • #1044 Resolve an issue building android support project
  • #985 Add serializer.Serialize(st, state); into SaveState
  • #982 Add a basic reactive adapter for the Android RecyclerView
  • #939 Add a reactive version of the Android.Support.V4.DialogFragment class
  • #885 Add a ControlFetcherMixin for the Android Support library

Xamarin Forms

  • #1160 Use non-generic BindableProperty.Create, since the generic overloads are deprecated
  • #952 #1115 Add support for view activation
  • #942 #1074 #1071 #986 Lots of routing fixes and improvements
  • #1032 Add reactive pages
  • #921 Add reactive cells
  • #953 Upgrade Xamarin Forms dependency
  • #951 Throw a useful exception from ViewModelViewHost if the view is of the wrong type
  • #950 Use ContentView as base class for ViewModelViewHost
  • #919 Fix ViewModelViewHost bug where collection is modified whilst being enumerated
  • #861 Retarget ReactiveUI.Xamforms to Profile259
  • #1153 Update reactiveui-xamforms nuspec dependency from v2.1.0.6529 to v2.3.1.114
  • #1152 Upgrade reactiveui-core for Xamarin.Forms from v2.2.0.31 to v2.3.1.114
  • #1150 Upgrade reactiveui-events for Xamarin.Forms from v2.2.0.31 to v2.3.1.114
  • #1196 Resolve a crash when using ViewModelViewHost with Xamarin Forms

Xamarin iOS

  • #1182 Use ViewWillAppear for iOS activation (not ViewDidAppear)
  • #1176 Migrate reactiveui-testing from Monotouch to Xamarin.iOS
  • #1087 Make ReactiveNavigationController activatable
  • #1086 Fix various RoutedViewHost issues
  • #927 Rewrite CommonReactiveSource to be reactive and fix numerous bugs
  • #917 Add ReactiveSplitViewController
  • #874 Make iOS ViewModelViewHost an actual view controller
  • #873 Fix a CommonReactiveSource race condition by ensuring that batched changes result in BeginUpdates call ASAP
  • #1177 Fix code generation of events with iOS 10

Xamarin Mac

  • #1185 Use Xamarin.Mac framework for reactiveui/reactiveui-testing/microsoft-reactive-testing
  • #1175 Xamarin.Mac (unified) now compiles on windows
  • #1022 Add ViewAttributes to Xamarin.Mac projects
  • #916 Fix ViewModelViewHost on Mac
  • #887 Changed output to Xamarin.Mac20 to reflect reality and added .nuspec

Housekeeping

  • #1188 Upload .dll artefacts to AppVeyor on successful build
  • #1179 Run unit tests as part of continuous integration pipeline
  • #1178 Resolved an issue with continuous integration pipeline
  • #1148 Bootstrapper now downloads/installs Android API level 24
  • #1140 Add GitHub issue/PR templates
  • #1128 Enable strict mode (fail the build on any powershell error)
  • #1092 Continuous integration and pre-release builds for v7
  • #1010 Compiler warnings for events disabled to reduce CI log spam

Documentation

  • #1003 Initial revamp of README.md
  • #898 Update compelling example in README.md for v6.x

Where to get it

You can download this release from nuget.org

ReactiveUI -

Published by ghuntley about 8 years ago

This release resolves a NuGet metadata defect which was preventing the installation of ReactiveUI into Windows Phone projects (issue https://github.com/reactiveui/ReactiveUI/issues/1146). The assemblies within v6.5.2 are the same as those found in v6.5.1 and v6.5.0.

For new projects, we recommend joining us in Slack and using the v7 nightlies which are available from MyGet as we are in the final stages of preparing for the release of v7.0.0.

ReactiveUI - ReactiveUI 6.5.1

Published by ghuntley about 8 years ago

This release resolves a NuGet metadata defect which was preventing the installation of ReactiveUI into portable class libraries that targeted Profile259. The assemblies within v6.5.1 are the same as those found in v6.5.0.

For new projects, we recommend joining us in Slack and using the v7 nightlies which are available from MyGet as we are in the final stages of preparing for the release of v7.0.0.

ReactiveUI - ReactiveUI 6.5.0

Published by anaisbetts over 9 years ago

What's New

Collection View improvements (#820)

Thanks to @kentcb, our support of UITableViewController and UICollectionViewController are much more reliable, and will correctly animate in items. A huge thanks for an awesome PR!

Dependency version bumps

This version of ReactiveUI requires Xamarin.Forms 1.4.2 and the latest Xamarin.Android AppCompat library. This most likely won't be a problem, but if it is you can downgrade to 6.4.x.

Bug fixes

  • Fix issue where WhenAnyObservable doesn't protect against null (#831, thanks @kentcb)
  • Improve WeakEventHandler when working with Xamarin.Forms, prevent crash (#826, thanks @nsainaney)
  • Allow null property name to be used with WhenAny (#811, thanks @asarium)
  • Improve binding error logging (#840, thanks @bradtwurst)
  • Add constructors to ReactiveActivity and ReactiveFragment to allow them to inherit a Java reference (#841, thanks @jonfuller)
  • Fix Xamarin.Forms navigation with ViewModel-first navigation (#819, thanks @bratsche)
  • Cleanup to activation on WP (#825, thanks @flagbug)
ReactiveUI - Oops Release for ReactiveUI 6.4.0

Published by anaisbetts over 9 years ago

ReactiveUI - ReactiveUI 6.4.0

Published by anaisbetts over 9 years ago

What's New

Xamarin.Mac 64-bit Support (#797)

Thanks to @mteper, ReactiveUI now has 64-bit Xamarin.Mac support

Other Stuff

  • Update constructors for Xamarin.iOS (#791, thanks @nverinaud)
  • Create a ReactiveActionBarActivity class (#794, thanks @marcosbozza)
ReactiveUI - ReactiveUI 6.3.1

Published by anaisbetts almost 10 years ago

What's New

Bug Fixes

  • Xamarin.Forms is now compatible with 64-bit iOS (#790)
  • Fix a crash in TestScheduler.WithAsync (#772, thanks @flagbug)
  • Add ReactiveNavigationController (#783, thanks @BrianSakhai)
ReactiveUI - ReactiveUI 6.3.0

Published by anaisbetts almost 10 years ago

What's New

  • Support for Xamarin.iOS 8.6 - you must build based on this for Xamarin.iOS
  • Add a Reactive FragmentActivity (#773, thanks @michaelstonis!)
ReactiveUI - ReactiveUI 6.2.1

Published by anaisbetts almost 10 years ago

What's New

Bug Fixes:

  • Fix crash in Reactive[Table/Collection]DataSource (#755, thanks @srimoyee-factory)
  • Fix an issue where Xamarin Forms routing would crash on startup #761
  • Fix issue around using Changed directly (#757, thanks @robhorvath)
ReactiveUI - ReactiveUI 6.2.0

Published by anaisbetts almost 10 years ago

What's New

Xamarin.iOS 64-bit support (#747)

ReactiveUI now fully supports the new 64-bit Xamarin.iOS API, if you are running Xamarin.iOS 8.4 or higher (currently in the Beta channel).

Small Fixes

  • Derived collections now have an onRemove method that can be used to clean up objects that are removed from the collection (#744, thanks @TheGrandUser)
  • Remove opportunistic scheduling in Cocoa because of ordering issues (#745, thanks @tberman)
  • Fix crashes where section changes could crash the app on iOS (#749, thanks @srimoyee-factory)
  • Fix a crash when using x => x as your selector (#741, thanks @eggapauli)
  • Propagate WhenActivated to subviews on iOS (#735, thanks @justin-factory)
  • Fix issue where INotifyPropertyChanging was not defined on all platforms
ReactiveUI - ReactiveUI 6.1.0

Published by anaisbetts about 10 years ago

What's New

ViewModel-based Routing for Xamarin.Forms Apps (#724)

Several small fixes have come together to enable ReactiveUI ViewModel-based Routing and auto-serialization for Xamarin.Forms-based apps:

See the PR for a sample app, and check out the documentation on Routing for more information on how it works.

Other Fixes

  • Added a version of TestScheduler.With that is async/await aware
  • Added a SupportLib version of ReactiveFragment
ReactiveUI - ReactiveUI 6.0.7

Published by anaisbetts about 10 years ago

What's New

Android Scheduler improvements

On Android, an improved Scheduler based on RxJava is now automatically configured in your application, that no longer requires setup in OnCreate. Using the main thread scheduler should now work even in contexts such as bound services or other non-Activity scenarios. (#717).

This PR also fixes an issue where scheduling from non-UI threads in Xamarin Forms-based apps could incorrectly throw an exception.

Documentation Galore

This release marks the first release whose source code contains our first steps toward comprehensive documentation. This has been a multiple-month effort from several people, such as @rikbosch, @niik, @dchaib, and @npnelson. Documentation will now be stored in the docs folder and will be kept up-to-date as components change.

Right now while many of the docs are stubs, the "basics" folder is completely written, it's highly recommended to check out the documents in this folder for more information.

WinForms Improvements

ReactiveUI now supports controls which derive from Component, such as ToolStripButton. Thanks to @vanderkleij for the patches (#720, #721)

Other

  • Add a Reactive class for UITabBarController (#723, thanks @tberman)
  • Allow Commands to be used with Menu Items (#722, thanks @mteper)
  • IsExecuting is now false as soon as the result from ExecuteAsync returns if awaited. (#714, thanks @Haacked)