HKW.ReactiveUI
0.4.6
dotnet add package HKW.ReactiveUI --version 0.4.6
NuGet\Install-Package HKW.ReactiveUI -Version 0.4.6
<PackageReference Include="HKW.ReactiveUI" Version="0.4.6" />
<PackageVersion Include="HKW.ReactiveUI" Version="0.4.6" />
<PackageReference Include="HKW.ReactiveUI" />
paket add HKW.ReactiveUI --version 0.4.6
#r "nuget: HKW.ReactiveUI, 0.4.6"
#:package HKW.ReactiveUI@0.4.6
#addin nuget:?package=HKW.ReactiveUI&version=0.4.6
#tool nuget:?package=HKW.ReactiveUI&version=0.4.6
HKW.ReactiveUI
An MVVM library, based on ReactiveUI, using SourceGenerator and Fody for mixed source code generation.
ReactivePropertyAttribute
Adding Notifications to Properties Using Fody and SourceGenerator
partial class MyViewModel : ReactiveObject
{
[ReactiveProperty]
public string Name { get; set; } = string.Empty;
}
Generated code
partial class MyViewModel : ReactiveObject
{
private string $Name;
[ReactiveProperty]
public string Name
{
get => $Name;
set => RaiseAndSetName(ref $Name, value, true);
}
private void RaiseAndSetName(ref string backingField, string newValue, bool check = true)
{
if (!check || !EqualityComparer<string>.Default.Equals(backingField, newValue))
{
string oldValue = backingField;
this.RaisePropertyChanging("Name");
OnNameChanging(oldValue, newValue);
backingField = newValue;
this.RaisePropertyChanged("Name");
OnNameChanged(oldValue, newValue);
}
}
}
ReactiveCommandAttribute
Adding Command Properties to Methods Using the Source Generator
partial class MyViewModel : ReactiveObject
{
[ReactiveCommand]
public void Test() { }
[ReactiveCommand]
public async Task TestAsync() { }
}
Generated code
partial class MyViewModel : ReactiveObject
{
private ReactiveCommand<Unit, Unit> _testCommand;
public ReactiveCommand<Unit, Unit> TestCommand =>
_testCommand ?? (_testCommand = ReactiveCommand.Create(Test));
private ReactiveCommand<Unit, Unit> _testAsyncCommand;
public ReactiveCommand<Unit, Unit> Test1AsyncCommand =>
_testAsyncCommand ?? (_testAsyncCommand = ReactiveCommand.CreateFromTask(TestAsync));
[ReactiveCommand]
public void Test() { }
[ReactiveCommand]
public async Task TestAsync() { }
}
NotifyPropertyChangeFromAttribute
Notify property when target property changed
A field is generated to cache the value when EnableCache
is true
partial class MyViewModel : ReactiveObject
{
[NotifyPropertyChangeFrom(nameof(ID), nameof(Name))]
public bool IsSame => ID == Name;
protected void InitializeReactiveObject() { }
}
Generated code
partial class MyViewModel : ReactiveObject
{
private bool _isSame;
[NotifyPropertyChangeFrom(nameof(ID), nameof(Name))]
public bool IsSame => _isSame;
protected void InitializeReactiveObject()
{
// InitializeInInitializeObject = true
_isSame = Name == ID;
}
protected void RaiseIsSameChange()
{
this.RaiseAndSetIfChanged(ref _isSame, Name == ID, "IsSame");
}
private void RaiseAndSetName(ref string backingField, string newValue, bool check = true)
{
...
this.RaisePropertyChanged("Name");
RaiseIsSameChange();
}
private void RaiseAndSetID(ref string backingField, string newValue, bool check = true)
{
...
this.RaisePropertyChanged("ID");
RaiseIsSameChange();
}
}
When EnableCache
is false
partial class MyViewModel : ReactiveObject
{
[NotifyPropertyChangeFrom(nameof(ID), nameof(Name), EnableCache = false)]
public bool IsSame => ID == Name;
protected void InitializeReactiveObject() { }
}
Generated code
partial class MyViewModel : ReactiveObject
{
private bool _isSame;
[NotifyPropertyChangeFrom(nameof(ID), nameof(Name), EnableCache = false)]
public bool IsSame => Name == ID;
protected void InitializeReactiveObject()
{
// InitializeInInitializeObject = true
_isSame = Name == ID;
}
protected void RaiseIsSameChange()
{
this.RaiseAndSetIfChanged(ref _isSame, Name == ID, "IsSame");
}
private void RaiseAndSetName(ref string backingField, string newValue, bool check = true)
{
...
this.RaisePropertyChanging("Name");
this.RaisePropertyChanging("IsSame");
backingField = newValue;
this.RaisePropertyChanged("Name");
this.RaisePropertyChanged("IsSame");
...
}
private void RaiseAndSetID(ref string backingField, string newValue, bool check = true)
{
...
this.RaisePropertyChanging("ID");
this.RaisePropertyChanging("IsSame");
backingField = newValue;
this.RaisePropertyChanged("ID");
this.RaisePropertyChanged("IsSame");
...
}
}
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. |
-
.NETStandard 2.0
- ReactiveUI (>= 20.4.1)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on HKW.ReactiveUI:
Package | Downloads |
---|---|
HKW.Utils
Utils by HKW. |
|
HKW.WPF
A dedicated WPF library providing Collections, TypeExtension, MVVMDialogs, and other features. |
|
HKW.MVVMDialogs
MVVMDialogs |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated |
---|---|---|
0.4.6 | 91 | 8/10/2025 |
0.4.5 | 115 | 8/8/2025 |
0.4.4 | 331 | 7/25/2025 |
0.4.3 | 370 | 7/25/2025 |
0.4.2 | 371 | 7/25/2025 |
0.4.1 | 373 | 7/25/2025 |
0.4.0 | 193 | 7/9/2025 |
0.3.8 | 157 | 6/3/2025 |
0.3.7 | 147 | 1/19/2025 |
0.3.6 | 139 | 1/8/2025 |
0.3.5 | 187 | 12/15/2024 |
0.3.4 | 118 | 12/13/2024 |
0.3.3 | 163 | 12/5/2024 |
0.3.2 | 152 | 12/2/2024 |
0.3.1 | 107 | 12/2/2024 |
0.3.0 | 114 | 12/1/2024 |
0.2.8 | 113 | 10/28/2024 |
0.2.7 | 104 | 10/28/2024 |
0.2.6 | 111 | 10/25/2024 |
0.2.5 | 132 | 10/20/2024 |
0.2.4 | 158 | 10/18/2024 |
0.2.3 | 106 | 10/14/2024 |
0.2.2 | 109 | 10/13/2024 |
0.2.1 | 115 | 10/12/2024 |
0.2.0 | 117 | 10/12/2024 |
0.1.10 | 121 | 10/8/2024 |
0.1.9 | 134 | 9/9/2024 |
0.1.8 | 117 | 9/9/2024 |
0.1.7 | 140 | 8/14/2024 |
0.1.6 | 147 | 8/14/2024 |
0.1.5 | 127 | 7/30/2024 |
0.1.4 | 122 | 7/15/2024 |
0.1.3 | 109 | 7/15/2024 |
0.1.2 | 169 | 7/6/2024 |
0.1.1 | 133 | 6/28/2024 |
0.1.0 | 126 | 6/26/2024 |