Code Behind Fields
Code inspections to verify declarations and usages of x:Name defined fields
Introduction
In XAML, we can use the x:Name
directive to declare a code-behind field for the XAML element is applied to.
Consider the following code:
<ContentPage>
<Label x:Name="myLabel" Text="Hello World"/>
</ContentPage>
The Label
element will have a code behind field named myLabel
generated by the XAML design tools. We can then use this field (myLabel
) in our code behind class or reference it within the current XAML document via the x:Reference
expression.
There are various issues that can arise from using the x:Name
directive and MFractor inspects for many known issues and provides code-fixes to resolve them.
x:Name Has Invalid Characters
As an x:Name
directive declares a new code-behind field, it's value must follow C#'s identifier name restrictions. If we do not follow these restrictions, our code will not compile.
If we enter an invalid name, MFractor will detect this and add a code error to inform you the x:Name
value will cause a compilation error:
Duplicate Code Behind Field Declarations
MFractor will inspect all x:Name
directives and validate that they are unique within the document. As the x:Name
directive creates a new code-behind field, duplicate x:Name
values will also create duplicate fields with the same name, causing a C# compiler error.
Empty Code Behind Field Declaration
MFractor will inspect all x:Name
directives and validate that they have a value; excluding a value from the x:Name
attribute will generate a compiler error:
Verify Referenced Code Behind Field Exists
We can use the x:Reference
expression to retrieve the instance of a code-behind field declared via the x:Name
directive. This is commonly usedto set BindingContext
of an element to another control in the visual tree, enabling us to data-bind to a property on that control.
For example:
<Switch x:Name="switch" />
<Label BindingContext="{x:Reference switch}"
IsVisible="{Binding IsToggled}"
Text="Hello World!"/>
In the above example, we are control the visibility of the Label
through the IsToggled
property on the Switch
.
MFractor will inspect usages of the x:Reference
expression and verify that the referenced element is defined in the current document using x:Name
:
If the referenced code behind field name closely matches a known x:Name
value, MFractor will suggest a code fix to autocorrect the typo to this name.