Home / News / MFractor v3.6 Is Now Available!

MFractor v3.6 Is Now Available!

Become a XAML wizard with our XAML IntelliSense enhancements. Simplified linker tooling for your Xamarin apps.

Today, Tom and I are happy to announce the official release of MFractor v3.6 for Visual Studio Mac.

In our 3.6 release, we've significantly improved our XAML IntelliSense engine to give developers a delightful editing experience. Additionally, we've added several tools to make worker with the linker much easier, fixed lots of bugs and made lots of incremental usability improvements!

Let's take a look at some of the highlights of this release.

XAML IntelliSense Enhancements
If you are a Xamarin.Forms developer working with XAML, you'll get a lot out of all our new XAML IntelliSense features.

We now support markup expression code completion; this includes suggesting markup extensions and their properties, suggesting binding context properties, static resource keys and much more.

If you work regularly with styles, setters or data-triggers, we've added the Setter Shorthand Completion to intelligently create setters and added code completion for Triggers.

Using the Setter shorthand completion to simplify working with styles and triggers in Xamarin.Forms XAML.

We've also included support for:
* View and layout auto-completion when inside a ControlTemplate
* ViewCell suggestion when inside a DataTemplate
* Suggest ControlTemplate and DataTemplate when editing resource dictionaries.
* Suggest compatible StaticResources for property values.
* When editing an xmlns, MFractor suggests all available assemblies and namespaces and generates the clr-namespace import.
* When inside a {Binding ...} expression MFractor will suggest available properties for data-binding.
* When inside a {StaticResource ...} expression MFractor will suggest available static resources.
* Support for Visual State Management.
* Support for x:Static expressions.
* Support for the OnIdiom and OnPlatform markup extensions.
* Support for FlexLayouts.
* IntelliSense action for importing controls. Simply type out the full name of the control (with the optional namespace name) and choose Import MyControl from MyNamespace.Namespace.
* XAML node value completion for types like colors or booleans etc.
* Completion support for CompressionLayout.IsHeadless.

Linker Tooling
One of the trickier parts of Xamarin is using the linker to remove unneeded symbols from your app. Luckily, we can use a linker configuration file to tell the Xamarin toolchain to explicitly exclude symbols from being removed by the linker.

This underused feature in Xamarin apps makes working with the linker much easier... However, it has little documentation and no code completion!

So, to make linker your apps easier, you can now use our Linker IntelliSense editor to write these custom linker files:

Using MFractors Xamarin Linker IntelliSense

And then, to make it even easier, why not just use the Exclude Symbol From Linking code action to automatically insert the symbol definition?

Using MFractors Exclude From Linking code action to make it easier to work with the Xamarin Linker


Voila!

Specify A Design-Time Binding Context
It's now possible to explicitly specify a desired binding context by applying the DesignTimeBindingContext attribute to the code-behind class.

To get started, add the following code file to your project:

DesignTimeBindingContextAttribute.cs
using System;

namespace MyApp.Attributes
{
/// <summary>
/// Apply the design time binding context attribute to your code-behind class to inform tools of your intended runtime binding context.
/// </summary>
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class DesignTimeBindingContextAttribute : Attribute
{
/// <summary>
/// Specifies the design time binding context using a fully qualified type name.
///
/// For example: MyApp.ViewModels.LoginViewModel.
/// </summary>
/// <param name="typeName">The fully qualified type name for the design time binding context.</param>
public DesignTimeBindingContextAttribute(string typeName)
{
}

/// <summary>
/// Specifies the design time binding context using typeof().
///
/// For example: typeof(LoginViewModel)
/// </summary>
/// <param name="type">The <see cref="System.Type"/> for the design time binding context, using typeof().</param>
public DesignTimeBindingContextAttribute(Type type)
{
}
}
}

Next, apply this attribute onto the code-behind class for your XAML file:

Applying By Type
[DesignTimeBindingContext(typeof(MyBindingContext))]

Applying By String
[DesignTimeBindingContext("MyApp.MyBindingContext")]

This attribute directs MFractor at your binding context to enable data-binding IntelliSense, code actions and code analysis for that XAML file.

Bug Fixes + Enhancements
Lastly, we've worked hard to improve MFractors stability and usability.

We fixed several bugs in our binding context resolver to make ViewModel detection better than ever, added static resource tooltips, added support for Visual Studio Mac 7.6 and heaps more. You can check out a full summary of this release at our official 3.6 release docs.

Are you liking what you see and want to try out all these new features? Then why not try out MFractor Professional!

Request Professional Trial

Happy coding everyone!

✌🏼
Matthew Robbins - Founder of www.mfractor.com