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
Bot releases are hidden (Show)
Published by glennawatson over 5 years ago
Published by glennawatson over 5 years ago
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
Windows Presentation Foundation
Housekeeping
You can download this release from nuget.org
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.
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.
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.
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
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.
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.
As part of this release we had 138 commits which resulted in 113 issues being closed.
All Platforms
Events Generator
Windows Forms
Universal Windows Platform
Windows Presentation Foundation
reactiveui-wpf
so the templates don't resolveXamarin Android
Xamarin Forms
Xamarin iOS
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
You can download this release from nuget.org
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
Windows Phone, Store and Universal
You can download this release from nuget.org
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
Xamarin Android
Xamarin Mac
Housekeeping
Documentation
You can download this release from nuget.org
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
UseInvariantCultureAttribute
and apply to relevant testsInvokeCommand
InvokeCommand
targets ReactiveCommandBase
, not ReactiveCommand
AsObservable
calls in ReactiveCommand
Xamarin Android
WireUpControls
implementationXamarin Forms
ViewModel
and BindingContext
propertiesRoutedViewHost
Housekeeping
Documentation
You can download this release from nuget.org
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
ReactiveCommand
Xamarin Android
WireUpControls
to find View
membersXamarin iOS
Xamarin Mac
You can download this release from nuget.org
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.
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.
ReactiveCommand
is completely rewritten again (sorry).
IReactiveCommand
should be replaced with ReactiveCommand
, possibly with type information (see below).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.canExecute
, scheduler
) are optional.CreateAsyncObservable
is now called CreateFromObservable
.CreateAsyncTask
is now called CreateFromTask
.TParam
in ReactiveCommand<TParam, TResult>
.
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:
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
.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.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 ofRoutingState
, so any code you have that interacts with its command may require minor updates.
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:
RegisterHandler
methods on the interaction exposed by the view model.Handle
on the interaction, passing in an input value.Note To enable you to ease into the migration, all previous types are available under the
ReactiveUI.Legacy
namespace.
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.
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.
As part of this release we had 113 issues closed.
All Platforms
WhenAnyObservable
overloads that combine latest via a given selectorBindCommand
implementation taking Func<TParam>
UnhandledErrorException
when a thrown exception goes unhandled (rather than just Exception
)InvokeCommand
to respect the command's execution windowWhenActivated
overload that takes a CompositeDisposable
, as well as a DisposeWith
extension methodToProperty
to work with indexersRoutingState
Activated
and Deactivated
observables to ViewModelActivator
ToProperty
is no longer lazy by defaultBind
overloads that convert via Func
sCreateCollection
overloadsIReactiveCollection<T>
BindTo
now throws a helpful exception when attempting to bind to null
CreateCollection
WhenNavigatedToObservable
method, telling you whenever a given view model is on top of the navigation stackObservableAsPropertyHelper
DataTemplate
if the DisplayMemberPath
of an ItemsControl
is setObservableAsPropertyHelper
provides the initial value immediatelyReactiveList
ViewContractAttribute
fallbackValue
from binding methodsToProperty
from ReactiveObject
to IReactiveObject
ReactiveUserControl
to relevant XAML platformsXmlnsDefinitionAttribute
for those XAML platforms that support itViewContract
property to ViewModelViewHost
for XAML platformsWaitForScheduler
exception handlingEvents Generator
Windows Phone, Store and Universal
LaunchActivatedEventArgs
to IActivatedEventArgs
Xamarin Android
Hour
/Minute
instead of CurrentHour
/CurrentMinute
ReactiveRecyclerViewAdapter
and ViewHolder
ReactiveAppCompatActivity
AsObservable
when ISubject
is returned as IObservable
serializer.Serialize(st, state);
into SaveState
RecyclerView
Android.Support.V4.DialogFragment
classControlFetcherMixin
for the Android Support libraryXamarin Forms
BindableProperty.Create
, since the generic overloads are deprecatedViewModelViewHost
if the view is of the wrong typeContentView
as base class for ViewModelViewHost
ViewModelViewHost
bug where collection is modified whilst being enumeratedViewModelViewHost
with Xamarin FormsXamarin iOS
ViewWillAppear
for iOS activation (not ViewDidAppear
)ReactiveNavigationController
activatableRoutedViewHost
issuesCommonReactiveSource
to be reactive and fix numerous bugsReactiveSplitViewController
ViewModelViewHost
an actual view controllerCommonReactiveSource
race condition by ensuring that batched changes result in BeginUpdates
call ASAPXamarin Mac
ViewAttributes
to Xamarin.Mac projectsViewModelViewHost
on MacHousekeeping
Documentation
You can download this release from nuget.org
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.
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.
Published by anaisbetts over 9 years ago
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!
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.
Published by anaisbetts over 9 years ago
Published by anaisbetts over 9 years ago
Thanks to @mteper, ReactiveUI now has 64-bit Xamarin.Mac support
Published by anaisbetts almost 10 years ago
Published by anaisbetts almost 10 years ago
Published by anaisbetts almost 10 years ago
Bug Fixes:
Changed
directly (#757, thanks @robhorvath)Published by anaisbetts almost 10 years ago
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).
onRemove
method that can be used to clean up objects that are removed from the collection (#744, thanks @TheGrandUser)x => x
as your selector (#741, thanks @eggapauli)INotifyPropertyChanging
was not defined on all platformsPublished by anaisbetts about 10 years ago
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.
TestScheduler.With
that is async/await awarePublished by anaisbetts about 10 years ago
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.
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.
ReactiveUI now supports controls which derive from Component, such as ToolStripButton. Thanks to @vanderkleij for the patches (#720, #721)