DynamicNotifyPropertyChanged 1.5.0
dotnet add package DynamicNotifyPropertyChanged --version 1.5.0
NuGet\Install-Package DynamicNotifyPropertyChanged -Version 1.5.0
<PackageReference Include="DynamicNotifyPropertyChanged" Version="1.5.0" />
<PackageVersion Include="DynamicNotifyPropertyChanged" Version="1.5.0" />
<PackageReference Include="DynamicNotifyPropertyChanged" />
paket add DynamicNotifyPropertyChanged --version 1.5.0
#r "nuget: DynamicNotifyPropertyChanged, 1.5.0"
#:package DynamicNotifyPropertyChanged@1.5.0
#addin nuget:?package=DynamicNotifyPropertyChanged&version=1.5.0
#tool nuget:?package=DynamicNotifyPropertyChanged&version=1.5.0
This library allows you to create types at runtime that implement INotifyPropertyChanging and INotifyPropertyChanged interfaces. Each property calls OnPropertyChanging and OnPropertyChanged in its setter.
Creating Type
Dynamic class can be created by calling:
Type DynamicNotifyPropertyChangedClassFactory.CreateType(DynamicProperty[] properties)
DynamicProperty contains following properties:
- Name
- Type
- RaisePropertyChanging
- RaisePropertyChanged
By default both OnPropertyChanging and OnPropertyChanged are injected into property setter, but you can disable it by changing RaisePropertyChanging and RaisePropertyChanged values.
You must ensure that duplicate properties are not present.
Created type is cached, e.g. if you pass same set of DynamicProperty (even in different order) new type will not be created.
Initializing Created Type
You can create new instance by calling:
object DynamicNotifyPropertyChangedClassFactory.CreateTypeInstance(Type type)
Alternatively, you can create Func that returns new instance by calling:
Func<object> DynamicNotifyPropertyChangedClassFactory.CreateTypeFactory(Type type)
Both methods use caching and Reflection.Emit internally for better performance.
Getting/Setting Property Value
Use DynamicPropertyAccess to get or set property values without reflection.
Batch changes
To improve performance during batch changes you can suspend PropertyChanging, PropertyChanged or both by calling:
IDisposable SuspendPropertyChangingNotifications()
IDisposable SuspendPropertyChangedNotifications(bool raisePropertyChangedOnDispose)
IDisposable SuspendNotifications(bool raisePropertyChangedOnDispose)
After IDisposable is disposed, events will start firing again.
If you wish to trigger PropertyChanged for all changed properties after Dispose is called, then set raisePropertyChangedOnDispose to true.
| 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 is compatible. |
| .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. |
-
.NETStandard 2.0
- System.Reflection.Emit (>= 4.7.0)
- System.Reflection.Emit.Lightweight (>= 4.7.0)
-
.NETStandard 2.1
- 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.