M.BindableProperty.Generator
0.8.0
See the version list below for details.
dotnet add package M.BindableProperty.Generator --version 0.8.0
NuGet\Install-Package M.BindableProperty.Generator -Version 0.8.0
<PackageReference Include="M.BindableProperty.Generator" Version="0.8.0" />
paket add M.BindableProperty.Generator --version 0.8.0
#r "nuget: M.BindableProperty.Generator, 0.8.0"
// Install M.BindableProperty.Generator as a Cake Addin #addin nuget:?package=M.BindableProperty.Generator&version=0.8.0 // Install M.BindableProperty.Generator as a Cake Tool #tool nuget:?package=M.BindableProperty.Generator&version=0.8.0
Maui.BindableProperty.Generator
Source generator that automatically transforms fields into BindableProperties that can be used in MAUI.
Installation
First, install NuGet. Then, install M.BindableProperty.Generator from the package manager console:
PM> Install-Package M.BindableProperty.Generator
Usage - Simple implementation
Just decorate field with the Bindable attribute.
using Maui.BindableProperty.Generator.Core;
public partial class CustomEntry : ContentView
{
[AutoBindable]
private string _placeholder;
}
the prevoius code will generate this:
public partial class CustomEntry
{
public static readonly Microsoft.Maui.Controls.BindableProperty PlaceholderProperty =
Microsoft.Maui.Controls.BindableProperty.Create(
nameof(Placeholder),
typeof(string),
typeof(CustomEntry),
default(string));
public string Placeholder
{
get => (string)GetValue(PlaceholderProperty);
set => SetValue(PlaceholderProperty, value);
}
}
Usage - Custom property name
Just decorate field with the Bindable attribute.
using Maui.BindableProperty.Generator.Core;
public partial class CustomEntry : ContentView
{
[AutoBindable(PropertyName = "Text")]
private string _t;
}
the prevoius code will generate this:
public partial class CustomEntry
{
public static readonly Microsoft.Maui.Controls.BindableProperty TextProperty =
Microsoft.Maui.Controls.BindableProperty.Create(
nameof(Text),
typeof(string),
typeof(CustomEntry),
default(string));
public string Text
{
get => (string)GetValue(TextProperty);
set => SetValue(TextProperty, value);
}
}
Usage - OnChanged method
Example 1 - No Parameters
Just decorate field with the Bindable attribute.
using Maui.BindableProperty.Generator.Core;
public partial class HeaderControl : ContentView
{
[AutoBindable(OnChanged = nameof(UpdateDisplayName))]
private string _firstName;
private void UpdateDisplayName()
{
// Do stuff here
}
}
the prevoius code will generate this:
public partial class HeaderControl
{
public static readonly Microsoft.Maui.Controls.BindableProperty FirstNameProperty =
Microsoft.Maui.Controls.BindableProperty.Create(
nameof(FirstName),
typeof(string),
typeof(HeaderControl),
defaultValue: default(string),
propertyChanged: __UpdateDisplayName);
public string FirstName
{
get => (string)GetValue(FirstNameProperty);
set => SetValue(FirstNameProperty, value);
}
private static void __UpdateDisplayName(Microsoft.Maui.Controls.BindableObject bindable, object oldValue, object newValue)
{
var ctrl = (HeaderControl)bindable;
ctrl.UpdateDisplayName();
}
}
Example 2 - One Parameter
Just decorate field with the Bindable attribute. The 'UpdateDisplayName' method must have only one parameter (must match the type of the field)
using Maui.BindableProperty.Generator.Core;
public partial class HeaderControl : ContentView
{
[AutoBindable(OnChanged = nameof(UpdateDisplayName))]
private string _firstName;
private void UpdateDisplayName(string newValue)
{
// Do stuff here
}
}
the prevoius code will generate this:
public partial class HeaderControl
{
public static readonly Microsoft.Maui.Controls.BindableProperty FirstNameProperty =
Microsoft.Maui.Controls.BindableProperty.Create(
nameof(FirstName),
typeof(string),
typeof(HeaderControl),
defaultValue: default(string),
propertyChanged: __UpdateDisplayName);
public string FirstName
{
get => (string)GetValue(FirstNameProperty);
set => SetValue(FirstNameProperty, value);
}
private static void __UpdateDisplayName(Microsoft.Maui.Controls.BindableObject bindable, object oldValue, object newValue)
{
var ctrl = (HeaderControl)bindable;
ctrl.UpdateDisplayName((string)newValue);
}
}
Example 3 - Two Parameters
Just decorate field with the Bindable attribute. The 'UpdateDisplayName' method must have two parameters (must match the type of the field)
using Maui.BindableProperty.Generator.Core;
public partial class HeaderControl : ContentView
{
[AutoBindable(OnChanged = nameof(UpdateDisplayName))]
private string _firstName;
private void UpdateDisplayName(string oldValue, string newValue)
{
// Do stuff here
}
}
the prevoius code will generate this:
public partial class HeaderControl
{
public static readonly Microsoft.Maui.Controls.BindableProperty FirstNameProperty =
Microsoft.Maui.Controls.BindableProperty.Create(
nameof(FirstName),
typeof(string),
typeof(HeaderControl),
defaultValue: default(string),
propertyChanged: __UpdateDisplayName);
public string FirstName
{
get => (string)GetValue(FirstNameProperty);
set => SetValue(FirstNameProperty, value);
}
private static void __UpdateDisplayName(Microsoft.Maui.Controls.BindableObject bindable, object oldValue, object newValue)
{
var ctrl = (HeaderControl)bindable;
ctrl.UpdateDisplayName((string)oldValue, (string)newValue);
}
}
Usage - Set default value
Example 1 - DateTime
Just decorate field with the Bindable attribute and add the "text/value" that you want to use as default value.
using Maui.BindableProperty.Generator.Core;
public partial class HeaderControl : ContentView
{
[AutoBindable(DefaultValue = "DateTime.Now")]
private DateTime _birthDate;
}
the prevoius code will generate this:
public partial class HeaderControl
{
public static readonly Microsoft.Maui.Controls.BindableProperty BirthDateProperty =
Microsoft.Maui.Controls.BindableProperty.Create(
nameof(BirthDate),
typeof(System.DateTime),
typeof(HeaderControl),
defaultValue: DateTime.Now);
public System.DateTime BirthDate
{
get => (System.DateTime)GetValue(BirthDateProperty);
set => SetValue(BirthDateProperty, value);
}
}
Example 2 - String
Just decorate field with the Bindable attribute and add the "text/value" that you want to use as default value.
using Maui.BindableProperty.Generator.Core;
public partial class HeaderControl : ContentView
{
[AutoBindable(DefaultValue = "USA")]
private string _country;
}
the prevoius code will generate this:
public partial class HeaderControl
{
public static readonly Microsoft.Maui.Controls.BindableProperty CountryProperty =
Microsoft.Maui.Controls.BindableProperty.Create(
nameof(Country),
typeof(string),
typeof(HeaderControl),
defaultValue: "USA");
public string Country
{
get => (string)GetValue(CountryProperty);
set => SetValue(CountryProperty, value);
}
}
Usage - Set default BindingMode
Just decorate field with the Bindable attribute and add the "BindingMode" that you want to use as default value.
using Maui.BindableProperty.Generator.Core;
public partial class HeaderControl : ContentView
{
[AutoBindable(DefaultBindingMode = nameof(BindingMode.TwoWay))]
private string _firstName;
}
the prevoius code will generate this:
public partial class HeaderControl
{
public static readonly Microsoft.Maui.Controls.BindableProperty FirstNameProperty =
Microsoft.Maui.Controls.BindableProperty.Create(
nameof(FirstName),
typeof(string),
typeof(HeaderControl),
defaultValue: default(string),
defaultBindingMode: Microsoft.Maui.Controls.BindingMode.TwoWay);
public string FirstName
{
get => (string)GetValue(FirstNameProperty);
set => SetValue(FirstNameProperty, value);
}
}
Usage - Hide existing BindableProperties
Just decorate field with the Bindable attribute and set "HidesUnderlyingProperty = true".
using Maui.BindableProperty.Generator.Core;
public partial class HeaderControl : ContentView
{
[AutoBindable(HidesUnderlyingProperty = true)]
private readonly Color _backgroundColor;
}
the prevoius code will generate this:
public partial class HeaderControl
{
public static new readonly Microsoft.Maui.Controls.BindableProperty BackgroundColorProperty =
Microsoft.Maui.Controls.BindableProperty.Create(
nameof(BackgroundColor),
typeof(Microsoft.Maui.Graphics.Color),
typeof(HeaderControl));
public new Microsoft.Maui.Graphics.Color BackgroundColor
{
get => (Microsoft.Maui.Graphics.Color)GetValue(BackgroundColorProperty);
set => SetValue(BackgroundColorProperty, value);
}
}
Project status
- ✅ Simple implementation - Done
- ✅ Custom property name - Done
- ✅ Custom Parameters - Done
- ✅ OnChanged method - Done
- ✅ OnChanged method overloading - Done
Extra info
This repo is using part of the code of CodeWriter to generate the CSharp files, thanks to the author.
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- No dependencies.
NuGet packages (6)
Showing the top 5 NuGet packages that depend on M.BindableProperty.Generator:
Package | Downloads |
---|---|
The49.Maui.ContextMenu
.NET MAUI library for Android and iOS to open a native context menu on long press. |
|
Sm.Maui.BottomSheet
ModalBottomSheet view for .NET MAUI |
|
SimpleRatingControl.MAUI
Simple Rating Control for .NET MAUI |
|
Yang.Maui.Helper.Controls
Package Description |
|
tsjdevapps.MauiControlsLib
Controls Library for .NET MAUI |
GitHub repositories (3)
Showing the top 3 popular GitHub repositories that depend on M.BindableProperty.Generator:
Repository | Stars |
---|---|
VladislavAntonyuk/MauiSamples
.NET MAUI Samples
|
|
the49ltd/The49.Maui.BottomSheet
.NET MAUI library used to display pages as Bottom Sheets
|
|
nor0x/Dots
the 🙂 friendly .NET SDK manager
|
Version | Downloads | Last updated |
---|---|---|
0.11.1 | 60,826 | 6/28/2023 |
0.11.0 | 203 | 6/28/2023 |
0.10.0 | 5,928 | 3/28/2023 |
0.9.3 | 8,861 | 12/7/2022 |
0.9.2 | 5,873 | 11/15/2022 |
0.9.1 | 913 | 9/27/2022 |
0.9.0 | 1,245 | 8/30/2022 |
0.8.3 | 1,341 | 7/27/2022 |
0.8.2 | 4,019 | 7/4/2022 |
0.8.1 | 550 | 7/1/2022 |
0.8.0 | 546 | 6/29/2022 |
0.7.0 | 657 | 4/28/2022 |
0.6.0 | 530 | 4/28/2022 |
0.5.0 | 517 | 4/21/2022 |
0.4.1 | 531 | 4/14/2022 |
0.4.0 | 535 | 4/12/2022 |
0.3.3 | 508 | 4/1/2022 |
0.3.2 | 501 | 4/1/2022 |
0.3.0 | 597 | 4/1/2022 |
Added support to "Nullable Reference Types"