HKW.ReactiveUI
0.3.8
See the version list below for details.
dotnet add package HKW.ReactiveUI --version 0.3.8
NuGet\Install-Package HKW.ReactiveUI -Version 0.3.8
<PackageReference Include="HKW.ReactiveUI" Version="0.3.8" />
<PackageVersion Include="HKW.ReactiveUI" Version="0.3.8" />
<PackageReference Include="HKW.ReactiveUI" />
paket add HKW.ReactiveUI --version 0.3.8
#r "nuget: HKW.ReactiveUI, 0.3.8"
#:package HKW.ReactiveUI@0.3.8
#addin nuget:?package=HKW.ReactiveUI&version=0.3.8
#tool nuget:?package=HKW.ReactiveUI&version=0.3.8
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.1.63)
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.7 | 101 | 5/21/2026 |
| 0.4.6 | 297 | 8/10/2025 |
| 0.4.5 | 247 | 8/8/2025 |
| 0.4.4 | 439 | 7/25/2025 |
| 0.4.3 | 459 | 7/25/2025 |
| 0.4.2 | 474 | 7/25/2025 |
| 0.4.1 | 469 | 7/25/2025 |
| 0.4.0 | 409 | 7/9/2025 |
| 0.3.8 | 259 | 6/3/2025 |
| 0.3.7 | 222 | 1/19/2025 |
| 0.3.6 | 208 | 1/8/2025 |
| 0.3.5 | 303 | 12/15/2024 |
| 0.3.4 | 187 | 12/13/2024 |
| 0.3.3 | 271 | 12/5/2024 |
| 0.3.2 | 261 | 12/2/2024 |
| 0.3.1 | 183 | 12/2/2024 |
| 0.3.0 | 187 | 12/1/2024 |
| 0.2.8 | 194 | 10/28/2024 |
| 0.2.7 | 168 | 10/28/2024 |
| 0.2.6 | 174 | 10/25/2024 |