The NumericValidationBehavior
is a Behavior
that allows the user to determine if text input is a valid numeric value. For example, an Entry
control can be styled differently depending on whether a valid or an invalid numeric input is provided.
Important
The .NET MAUI Community Toolkit Behaviors do not set the BindingContext
of a behavior, because behaviors can be shared and applied to multiple controls through styles. For more information refer to .NET MAUI Behaviors
The following examples show how to add the NumericValidationBehavior
to an Entry
and change the TextColor
when the number entered is considered invalid (not between 1 and 100).
Including the XAML namespace
In order to use the toolkit in XAML the following xmlns
needs to be added into your page or view:
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
Therefore the following:
<ContentPage
x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
</ContentPage>
Would be modified to include the xmlns
as follows:
<ContentPage
x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
</ContentPage>
Using the NumericValidationBehavior
The NumericValidationBehavior
can be used as follows in XAML:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Class="CommunityToolkit.Maui.Sample.Pages.Behaviors.NumericValidationBehaviorPage">
<ContentPage.Resources>
<Style x:Key="InvalidEntryStyle" TargetType="Entry">
<Setter Property="TextColor" Value="Red" />
</Style>
<Style x:Key="ValidEntryStyle" TargetType="Entry">
<Setter Property="TextColor" Value="Green" />
</Style>
</ContentPage.Resources>
<Entry Keyboard="Numeric">
<Entry.Behaviors>
<toolkit:NumericValidationBehavior
InvalidStyle="{StaticResource InvalidEntryStyle}"
ValidStyle="{StaticResource ValidEntryStyle}"
Flags="ValidateOnValueChanged"
MinimumValue="1.0"
MaximumValue="100.0"
MaximumDecimalPlaces="2" />
</Entry.Behaviors>
</Entry>
</ContentPage>
The NumericValidationBehavior
can be used as follows in C#:
class NumericValidationBehaviorPage : ContentPage
{
public NumericValidationBehaviorPage()
{
var entry = new Entry
{
Keyboard = Keyboard.Numeric
};
var validStyle = new Style(typeof(Entry));
validStyle.Setters.Add(new Setter
{
Property = Entry.TextColorProperty,
Value = Colors.Green
});
var invalidStyle = new Style(typeof(Entry));
invalidStyle.Setters.Add(new Setter
{
Property = Entry.TextColorProperty,
Value = Colors.Red
});
var numericValidationBehavior = new NumericValidationBehavior
{
InvalidStyle = invalidStyle,
ValidStyle = validStyle,
Flags = ValidationFlags.ValidateOnValueChanged,
MinimumValue = 1.0,
MaximumValue = 100.0,
MaximumDecimalPlaces = 2
};
entry.Behaviors.Add(numericValidationBehavior);
Content = entry;
}
}
Our CommunityToolkit.Maui.Markup
package provides a much more concise way to use this Behavior
in C#.
using CommunityToolkit.Maui.Markup;
class NumericValidationBehaviorPage : ContentPage
{
public NumericValidationBehaviorPage()
{
Content = new Entry
{
Keyboard = Keyboard.Numeric
}.Behaviors(new NumericValidationBehavior
{
InvalidStyle = new Style<Entry>(Entry.TextColorProperty, Colors.Red),
ValidStyle = new Style<Entry>(Entry.TextColorProperty, Colors.Green),
Flags = ValidationFlags.ValidateOnValueChanged,
MinimumValue = 1.0,
MaximumValue = 100.0,
MaximumDecimalPlaces = 2
});
}
}
Expand table
Property
Type
Description
MaximumDecimalPlaces
double
The maximum number of decimal places that will be allowed.
MinimumDecimalPlaces
double
The minimum number of decimal places that will be allowed.
MaximumValue
double
The maximum numeric value that will be allowed.
MinimumValue
double
The minimum numeric value that will be allowed.
ValidationBehavior Properties
The following properties are implemented in the base class, public abstract class ValidationBehavior
:
Expand table
Property
Type
Description
Flags
ValidationFlags
Provides an enumerated value that specifies how to handle validation.
ForceValidateCommand
ICommand
Allows the user to provide a custom ICommand
that handles forcing validation.
InvalidStyle
Style
The Style
to apply to the element when validation fails.
IsNotValid
bool
Indicates whether or not the current value is considered not valid.
IsRunning
bool
Indicates whether or not the validation is in progress now (waiting for an asynchronous call is finished).
IsValid
bool
Indicates whether or not the current value is considered valid.
ValidStyle
Style
The Style
to apply to the element when validation is successful.
Value
object
The value to validate.
ValuePropertyName
string
Allows the user to override the property that will be used as the value to validate.
You can find an example of this behavior in action in the .NET MAUI Community Toolkit Sample Application .
You can find the source code for NumericValidationBehavior
over on the .NET MAUI Community Toolkit GitHub repository .