PropertyNotify 2.0.1
dotnet add package PropertyNotify --version 2.0.1
NuGet\Install-Package PropertyNotify -Version 2.0.1
<PackageReference Include="PropertyNotify" Version="2.0.1" />
<PackageVersion Include="PropertyNotify" Version="2.0.1" />
<PackageReference Include="PropertyNotify" />
paket add PropertyNotify --version 2.0.1
#r "nuget: PropertyNotify, 2.0.1"
#:package PropertyNotify@2.0.1
#addin nuget:?package=PropertyNotify&version=2.0.1
#tool nuget:?package=PropertyNotify&version=2.0.1
Property Notify
This small project includes two classes: a Generator.cs and a NotifyAttribute.cs.
Together they work to silently implement the INotifyChanged, PropertyChanged pattern, turning plain { get; set; } properties into 'full' properties with a backing field that call a method when changed.
NOTE: this project requires the target project you use it with to be dotnet 9 and langversion 13 (the default for 9.0) to work, as it needs partial properties.
The notify attribute is added by the source generator as well, and will by default set the new property to call OnPropertyChanged with no arguments. Parameters can be sent to both change the method name it calls, to get it to pass the property name as a string argument, and to pass the prior value.
Example
If you define a property like so:
using PropertyNotify;
public partial class ChildStyleMapFlat
{
[Notify("OnPropChanged")]
public partial bool Parent_BasicProperties { get; set; }
private void OnPropChanged()
{
// ...
}
// ...
}
Then Generator.cs (which is an incremental source generator) will silently (as in you wont see the output, but the compiler will) generate the following:
// <auto-generated/>
public partial class ChildStyleMapFlat
{
private bool parent_BasicProperties;
public partial bool Parent_BasicProperties
{
get => parent_BasicProperties;
set
{
if (!EqualityComparer<bool>.Default.Equals(parent_BasicProperties, value))
{
parent_BasicProperties = value;
OnPropChanged();
}
}
}
}
That is, any property with the Notify attribute will be turned into a property with a backing field that calls your specified function or the default when the property's value changes.
Simple!
If you want to see what its generating, you can add this to the property group of your using project:
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GeneratedFiles</CompilerGeneratedFilesOutputPath>
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
This package has no dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.