A small, yet powerful framework, designed for building applications across all XAML platforms. Its strong support for MV* patterns will enable you to build your solution quickly, without the need to sacrifice code quality or testability.
This is a minor bug fix release.
Caliburn.Micro.Xamarin.Forms
nuget package now depends on Caliburn.Micro
for applications helping to ensure you have all the right packages. #323InitializeComponent
in Xaamarin.Forms. #326Caliburn.Micro.Start
nuget package. #348ContentView
bindings correctly deal with message targets in Xamarin.Forms. #349DocumentViewer
in WPF. #368ViewLocator
will now correctly call GetInstance
for resolution of the view falling back to manual instantiation. #339 Update: This change was reverted in 3.0.3
The highest impact bug fix for this release is the last one, previously the ViewModelLocator
would call GetInstance
to try to resolve the view model (falling back to GetAllInstances
and then manual instantiation), ViewLocator
however previously only called GetAllInstances
.
This release makes them consistent, however it could cause problems if you're throwing exceptions on no resolution of a service from the container. I'd recommend if you are doing this checking whether the type is assignable to UIElement
(or some view type) and return null
(or skip throwing the exception).
This is a minor bug fix release.
BindingScope
updated to deal with MenuFlyoutSubItem
in UWP - #308I'm really pleased to finally announce the release of Caliburn.Micro 3.0.0 after a long period of being in beta. The major features of 3.0.0 are Windows 10 / UWP and Xamarin.Forms support. With this release you can use your view models across all major platforms that support C#!
It's important to note this is a change in the major versions to there may be breaking changes.
The Windows 10 release follows along with the Windows 8.1 and Windows Phone 8.1 releases and combines them into a single library which is great from a maitenance perspective. If we need to start adding features specific to Phone, Xbox or even HoloLens they'll be done using feature detection via Windows.Foundation.Metadata.ApiInformation
.
It includes conventions for new controls such as SplitView
.
Also included is a sample showing how to set up a SplitView
style app with the Frame
not being the root visual but inside the ShellView
, this sample is available at Hello UWP.
We now use the new open sourced XAML Behaviours package.
This release drops support for Windows 8.0 (different from Windows 8.1).
This release brings support for Xamarin.Forms which in abstraction layer over the different UIs in iOS, Android and Windows Phone Silverlight (Windows 8 / 10 support coming later). What's really interesting is that it comes with it's own XAML syntax (not the same as Windows XAML but very similar), this means we can get a closer to standard Caliburn.Micro experience. I was pleasantly surprised by how much I got ported reasonable easy.
There are some limitations of the Xamarin.Forms flavour of of XAML, primarily there is no programmatic access to x:Name
mean we cannot support named based conventions. We can still support attached properties such as cm:Message.Attach
as well as convention based view / view model location.
<ListView ItemsSource="{Binding Features}" HasUnevenRows="True"
cm:Message.Attach="[Event ItemSelected] = [ShowFeature($selectedItem)]">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ContentView cm:View.Model="{Binding}" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Also included is the now standard navigation service and navigation helper methods
navigationService.For<ProductViewModel>()
.WithParam(v => v.ProductId, 42)
.Navigate();
A sample of this sort of app is can be found at Hello.Forms in the GitHub repository.
One of the more interesting features here is that Xamarin.Forms runs on top of the existing mobile platform (Xamarin.iOS, Xamarin.Android and Windows Phone Silverlight). This makes it the first version where two different platforms of Caliburn.Micro have to run side by side. We essentially have two instances of ViewModelLocator
, one in Caliburn.Micro.ViewModelLocator
for the current host platform and one at Caliburn.Micro.Xamarin.Forms.ViewModelLocator
if Xamarin.Forms is present.
This release primarily targets Xamarin.Forms, however work has been done to allow your view models to be reused within a Xamarin.iOS or Xamarin.Android applications with no support around binding or conventions.
These features will be added in later feature releases.
A sample of this sort of app is can be found at Hello.Xamarin in the GitHub repository.
One new feature in this release is the CachingFrameAdapter
. This subclass of FrameAdapter
(which implements INavigationService
in WinRT platforms such as Windows 8.1, Windows Phone 8.1 and Windows 10) will cache internally view models and reuse them on the appropriate navigation. This allows scenarios where the built in NavigationCacheMode
doesn't make sense but still preserve your view model state. A sample of this in action is available at Caliburn.Micro.State.
MainWindow
when it's disposed.ViewLocator.LocateForModelType
failing to deal with improperly reused views in WinRT.Action.Invoke
.FrameAdapter
.BindingScope
has been cleaned up a lot so will be easier to extend.CanLogin
will be used as a guard for LoginAsync
and will be attached to a control with xName="Login"
.MessageBinder
.Screen.IsActive
, Screen.IsInitialised
and PropertyChangedBase.IsNotifying
are now virtual, we don't see then behaviour being overriden but a lot apps will need to add their own custom attributes to these properties.Bind.Model
had a feature enabling you to pass a string which used IoC
to find the model. This was deprecated in 2.0.0 and has now been removed.SimpleContainer
now only uses public constructors.UriFor
method has been deprecated in favour of just For
given the lack of uri support on a number of platforms.AssemblySourceCache
which means if your view models do not implement INotifyPropertyChanged
or views subclass from UIElement
then they may not be found by ViewLocator
or ViewModelLocator
. This behaviour can be changed by modifying AssemblySourceCache.ExtractTypes
.Thank you to all who have contributed fixes, reported issues and generally feedback on the extended pre-release versions.
As well a bit thanks to Marker Metro who sponsored a lot of the time it took me to put this 3.0.0 release together.
All the release notes from 3.0.0-alpha and 3.0.0-beta1 apply to this release as well.
SplitView
CanLogin
will be used as a guard for LoginAsync
and will be attached to a control with xName="Login"
. Thanks @BrunoJuchliAll the breaking changes from 3.0.0-alpha and 3.0.0-beta1 apply to this release as well.
DefaultPlatformProvider
has been removed with PlatformProvider.Current
now throwing an exception if not correctly initialized.All the release notes from 3.0.0-alpha apply to this release as well.
The Windows 10 release follows along with the Windows 8.1 and Windows Phone 8.1 releases and combines them into a single library which is great from a maitenance perspective. If we need to start adding features specific to Phone, Xbox or even HoloLens they'll be done using feature detection via Windows.Foundation.Metadata.ApiInformation
.
Also included is a sample showing how to set up a SplitView
style app with the Frame
not being the root visual but inside the ShellView
, this sample is available at Hello UWP.
One new feature in this release is the CachingFrameAdapter
. This subclass of FrameAdapter
(which implements INavigationService
in WinRT platforms such as Windows 8.1, Windows Phone 8.1 and Windows 10) will cache internally view models and reuse them on the appropriate navigation. This allows scenarios where the built in NavigationCacheMode
doesn't make sense but still preserve your view model state. A sample of this in action is available at Caliburn.Micro.State.
NavigationHelper
which adds the For<TViewModel>
method to allow easier view model navigation.navigationService.For<ProductViewModel>()
.WithParam(v => v.ProductId, 42)
.Navigate();
MainWindow
when it's disposed. Thanks dvdorle.ViewLocator.LocateForModelType
failing to deal with improperly reused views in WinRT.Action.Invoke
.FrameAdapter
.BindingScope
has been cleaned up a lot so will be easier to extend.All the breaking changes from 3.0.0-alpha apply to this release as well.
Bind.Model
had a feature enabling you to pass a string which used IoC
to find the model. This was deprecated in 2.0.0 and has now been removed.SimpleContainer
now only uses public constructors. Thanks belyansky.UriFor
method has been deprecated in favour of just For
given the lack of uri support on a number of platforms.AssemblySourceCache
which means if your view models do not implement INotifyPropertyChanged
or views subclass from UIElement
then they may not be found by ViewLocator
or ViewModelLocator
. This behaviour can be changed by modifying AssemblySourceCache.ExtractTypes
.More information can be found on the announcement
MyApp.ViewControllers.LoginViewController
to MyApp.ViewModels.LoginViewModel
may not make sense in the long term.x:Name
in Xamarin.Forms, therefore the feature of name based conventions will not be available, you will need to use normal {Binding Username}
and cm:Message.Attach="SignIn"
.BindableProperty
has a Binding
set. Thankfully we only use this ensure name based conventions don't overwrite existing bindings, given the first issue this is currently less of a problem.FormsApplication
and that both Caliburn.Micro and Xamarin.Forms want to set a custom UIApplicationDelegate
, we'll need a better way of playing together nicely.Right now there are no breaking API changes for the existing platforms there are some ABI ones, given the new multi-platform scenario with Xamarin Forms I've introduced a new assembly Caliburn.Micro.Platform.Core
that holds some of the internal classes used the various platform assemblies. This lets us have to platforms at the same time without any type collision.
If you're using nuget then this new assembly will automatically be referenced, but if you're doing any sort of manual references you may need to check this out. I've applied this change to all the "modern" platforms (.NET 4.5, Windows Phone 8, Windows 8, Windows 8.1 Windows Phone 8.1, Xamarin.iOS and Xamarin.Android). Due to the PCL profile restrictions the .NET 4.0 and Silverlight 5 platforms work as they previously did.
As the alpha progresses I expect there will be breaking changes on the Xamarin platforms, and I don't expect many if any changes on the others.
Thanks to all who contributed fixes, logged bugs etc.
PropertyChangedBase.Refresh
is now virtual.SettingsWindowManager
to open independent flyouts [WinRT].AttachedCollection.On*
methods are now virtual.ViewAware.GetView
is now virtual`.ViewLocator.LocateForModel
falls back to LocateForModelType
if the view could not be added to the visual tree.ActionMessage.UpdateAvailablility
is now virtual.FrameAdapter
.Thanks to all who contributed fixes, logged bugs etc.
PropertyChangedBase
supports DataContract serialization on appropriate platforms.INavigationService.BackPressed
to better let apps handle and potentially cancel hardware back button events.Pivot
.OnViewReady
argument was null.ActionMessage
is more resilient to null values.View.IsInDesignMode
.Thanks to all who contributed fixes, logged bugs etc.
After a long stretch Caliburn.Micro has gone 2.0.0 including better support for Portable Class Libraries and Universal apps.
Initialize
rather than Start
.