Releases: reactiveui/ReactiveUI
ReactiveUI 6.0.2
What's New
Bug Fixes
- Improvements to iOS collection views (#678, #681, thanks @tberman)
- Fix exception in WeakEventHandler when adding an element twice (#679, thanks @jlaanstra)
- Update to Rx 2.2.5 to support Universal PCL Profile259 (#676, thanks @jlaanstra)
ReactiveUI 6.0.1
What's New
Bug Fixes
- Update Xamarin Forms to have correct metadata (#662, thanks @nestalk)
- Fix issue with Android platform on startup (#659)
- Fix design-time issue on WPF with RoutedViewHost
- Fix issue with bindings disappearing on WPF (#672, thanks @jlaanstra)
- Update Android Support Library to v20
ReactiveUI 6.0
Welcome to ReactiveUI 6.0
After 8 months of work, 878 commits, and 1032 files changed, ReactiveUI 6.0 is finally released, the biggest RxUI release ever! A huge thanks to our contributers for this release:
- Johan Laanstra
- Oren Novotny
- Todd Berman
- Michael Teper
- Felipe Lessa
- Amy Palamountain
- Dennis Daume
- Rik Bosch
- James Nugent
- Phil Haack
- Maratoss
- David Lechner
- Justin Manus
- Keith Dahlby
- Markus Olsson
In particular, a huge thanks goes to Johan, who has done an enormous amount of great work on this release. Thank you so much!
Migrating from existing code
We've written a migration guide to help existing application authors migrate their 5.x applications to ReactiveUI 6.0. Check out this document before updating your dependencies to get a heads-up as to what you're in for.
What's New in ReactiveUI 6.0
Over 120 new features were merged into ReactiveUI 6.0, trying to sum them all up is a huge undertaking! Here are some of the highlights:
Universal Windows Phone app and Xamarin Forms Support
ReactiveUI 6.0 has great support for all of the latest developer platforms, including WinRT Universal Apps as well as support for the new Xamarin Forms UI toolkit via the new ReactiveUI-XamForms
NuGet package. Use either the updated Portable Library support, or use the new Shared Projects tooling in Visual Studio.
Existing support for Android and iOS has also been greatly improved, including support for unit test runners on those platforms, as well as creating Observable abstractions for all events via the ReactiveUI-Events
package. Helpers for the Android Support Library are now also provided, via the ReactiveUI-AndroidSupport
package.
ReactiveUI 6.0 supports the following platforms (In order of personal developer joy):
- Xamarin.Android
- Xamarin.iOS
- Xamarin.Mac
- Xamarin Forms (iOS + Android + WP8)
- .NET 4.5 (WPF and Windows Forms, via
ReactiveUI-WinForms
) - Universal Windows Apps (WPA81)
- Windows Phone 8.0 Apps (Silverlight-based)
- Windows Store Apps (WinRT)
ReactiveUI makes creating list-based views a snap
We've added great support for recycling list-based views on iOS and Android (UICollectionView
and UITableView
on iOS, ListAdapter
on Android). These new adapter classes allow you to map a ReactiveList of ViewModel objects and automatically create and recycle the associated views, for high-performance lists without writing a ton of boilerplate code.
On iOS, added and removed items will even be automatically animated in and out. On Android, we help you easily implement the ViewHolder pattern to limit the amount of work done while scrolling.
Large Application Performance
One of the focuses of this release has been performance and memory usage in large applications. ReactiveUI 6.0 is much less prone to creating memory leaks in application code via WeakEventManager, as well as more performant by eliminating scheduling latency as much as possible. Other features, such as View and ViewModel Activation, allow you to create and clean-up objects only when the View is actually visible on-screen, saving a lot of unnecessary work.
While some of these changes will require you to update your application and unit tests, the end result is an application that uses less memory and feels more responsive.
The same Rx, Everywhere
ReactiveUI 5.x used a separate installation of the Reactive Extensions for .NET for Xamarin projects, which made creating proper Portable Libraries more difficult. RxUI 6.0 now resolves this completely, and you can now build ViewModels that work on every supported platform.
Questions, Comments, Concerns?
There are three great venues for problems / questions related to this release:
- The ReactiveUI mailing list
- Issues on GitHub
- The ReactiveUI Slack chat room - if you're interested in joining this chat room, please Email [email protected] from the Email you want to use and I can add you.
ReactiveUI 6.0 Preview 7
What's New
This is a prerelease version of ReactiveUI 6.0 - use at your own release, we make no guarantees that this works for you or even at all.
Check the Ship PR for more info
ReactiveUI 5.5.1
What's New
- Fix a glitch in XAML-based apps where WhenAny'ing DependencyProperties sometimes wouldn't work (Backport of #558)
- Bump the version of Rx on MonoMac to the one currently shipping in Mono
ReactiveUI 6.0 Preview 6
What's New
This is a prerelease version of ReactiveUI 6.0 - use at your own release, we make no guarantees that this works for you or even at all.
Check the Ship PR for more info
ReactiveUI 5.5
What's New
Bug Fixes
- Command bindings in WinForms now affect Enabled (#443, thanks @rzhw)
- Ensure that common WinForms controls don't get trumped by WPF (#447, thanks @rzhw)
- Enable BindCommand to work with nested ViewModels (#450, thanks @onovotny!)
- Attempt to prevent the Mono linker from stripping things we need (#455, thanks @onovotny!)
- Improvements to iOS binding (#473, #496, thanks @tberman)
Activation
Thanks to the great work by @jen20, the View / ViewModel activation from ReactiveUI 6.0 has been backported to 5.x. Normally large features aren't backported, but due to discovering that DependencyProperties leak memory in bindings without this feature, we decided to backport it.
What do you mean, leaks?
The following code, in a sane world, wouldn't leak:
public MyCoolUserControl()
{
this.OneWayBind(ViewModel, x => x.FirstName, x => x.FirstName.Text);
}
Normally, when both the View and the ViewModel go out of scope, the GC would clean them both up and everything would be great. However, because of the Dependency Property system, this isn't true. Every time you WhenAny or Bind through a DependencyProperty, you must explicitly clean it up by Disposing. To help out with this, a new method has been created on Views and ViewModels.
Consider the following ViewModel constructor:
public MyBrokenViewModel()
{
UserError.RegisterHandler(x => {
// NB: Stuff
});
}
This is broken because every time we create MyBrokenViewModel, we create another error handler. What Do? What we really want for certain global things like UserError, is for UserError to be subscribed only when the View associated with the ViewModel is visible. However, that information isn't available to ViewModels, and even if it was, it's not super obvious. Let's fix it
How does this work:
Activation allows you, for both Views and ViewModels, to set up the things that should be active when the View is visible. Here's how you do it for ViewModels:
public class MyWorkingViewModel : ReactiveObject, ISupportsActivation
{
public ViewModelActivator Activator { get; protected set; }
public ActivatingViewModel()
{
Activator = this.WhenActivated(d => {
// d() registers a Disposable to be cleaned up when
// the View is deactivated / removed
d(UserError.RegisterHandler(x => {
// NB: Stuff
}));
});
}
}
Here's how it works for Views:
public class MyWorkingView : UserControl, IViewFor<MyWorkingViewModel>
{
public ActivatingView()
{
this.WhenActivated(d => {
Console.WriteLine("Helloooooo Nurse!")
d(Disposable.Create(() => Console.WriteLine("Goodbye, Cruel World")));
});
}
}
Note that calling WhenActivated
in a View automatically means that the associated ViewModel gets notified for activated / deactivated changes (and in fact, you must call WhenActivated
in the View to get the ViewModel to be notified).
ReactiveUI 6.0 Preview 4
What's New
This is a prerelease version of ReactiveUI 6.0 - use at your own release, we make no guarantees that this works for you or even at all.
Check the Ship PR for more info
ReactiveUI 6.0 Preview 1
What's New
This is a prerelease version of ReactiveUI 6.0 - use at your own release, we make no guarantees that this works for you or even at all.
Check the Ship PR for more info
ReactiveUI 5.4.0
What's New
Since some of these fixes change behavior (such as the NLog fix), this is a minor release - however, most of these changes shouldn't affect existing programs
Bug Fixes
- Allow binding to 3rd party control libraries in WinForms (#405, thanks @rikbosch)
- Fix F# friendly ObservableForProperty (#407, thanks @marklam)
- Clean up NuSpec files for Xamarin on Visual Studio (#410, thanks @onovotny)
- Fixes to deserializing ReactiveObjects using certain serializers (#412, thanks @meteficha)
- Small improvements to derived collections (#417, thanks @meteficha)
- Change NLog to use the full class name so it is easier to filter on (thanks @npnelson)
- Race condition and reentrancy fixes to Reactive(Table/Collection)ViewSource (#425 + #426 + #433, thanks @meteficha)
- Remove Pex from the list of test runners because it conflicts with WriteableBitmapEx (#428, thanks @tiagomargalho)
- Fix up some of the collection interfaces (#430, thanks @haacked)
- Add Count* observables to list interfaces (#436, thanks @onovotny)
- Disable setting up ViewHosts in design mode