DynamicNotifyPropertyChanged 1.2.0
See the version list below for details.
dotnet add package DynamicNotifyPropertyChanged --version 1.2.0
NuGet\Install-Package DynamicNotifyPropertyChanged -Version 1.2.0
<PackageReference Include="DynamicNotifyPropertyChanged" Version="1.2.0" />
paket add DynamicNotifyPropertyChanged --version 1.2.0
#r "nuget: DynamicNotifyPropertyChanged, 1.2.0"
// Install DynamicNotifyPropertyChanged as a Cake Addin #addin nuget:?package=DynamicNotifyPropertyChanged&version=1.2.0 // Install DynamicNotifyPropertyChanged as a Cake Tool #tool nuget:?package=DynamicNotifyPropertyChanged&version=1.2.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 Property Value
You can get property value by calling:
T ObjectExtensions.GetPropertyValue<T>(this object source, string propertyName)
Alternatively, you can create Func
that gets property value from object by calling:
Func<object, object> TypeExtensions.GetPropertyGetter(this Type type, string propertyName)
Both methods have TryGet
pattern alternatives.
Setting Property Value
You can set property value by calling:
void ObjectExtensions.SetPropertyValue<T>(this object source, string propertyName, T value)
Alternatively, you can create Func
that sets property value on object by calling:
Action<object, object> TypeExtensions.GetPropertySetter(this Type type, string propertyName)
Both methods have TryGet
pattern alternatives.
All methods described above use caching and compiled expressions for better performance.
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. |
.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.