Ecng.ComponentModel
1.0.427
See the version list below for details.
dotnet add package Ecng.ComponentModel --version 1.0.427
NuGet\Install-Package Ecng.ComponentModel -Version 1.0.427
<PackageReference Include="Ecng.ComponentModel" Version="1.0.427" />
<PackageVersion Include="Ecng.ComponentModel" Version="1.0.427" />
<PackageReference Include="Ecng.ComponentModel" />
paket add Ecng.ComponentModel --version 1.0.427
#r "nuget: Ecng.ComponentModel, 1.0.427"
#:package Ecng.ComponentModel@1.0.427
#addin nuget:?package=Ecng.ComponentModel&version=1.0.427
#tool nuget:?package=Ecng.ComponentModel&version=1.0.427
Ecng.ComponentModel
MVVM infrastructure, property change notifications, validation attributes, and UI component helpers.
Property Change Notifications
NotifiableObject
Base class implementing INotifyPropertyChanged and INotifyPropertyChanging.
using Ecng.ComponentModel;
public class Person : NotifiableObject
{
private string _name;
public string Name
{
get => _name;
set
{
if (_name == value) return;
NotifyChanging(); // Fires PropertyChanging
_name = value;
NotifyChanged(); // Fires PropertyChanged
}
}
}
// Subscribe to changes
var person = new Person();
person.PropertyChanged += (s, e) =>
{
Console.WriteLine($"{e.PropertyName} changed");
};
ViewModelBase
Extended base class for ViewModels with dispatcher support.
public class MainViewModel : ViewModelBase
{
private bool _isLoading;
public bool IsLoading
{
get => _isLoading;
set
{
_isLoading = value;
NotifyChanged();
}
}
}
DispatcherNotifiableObject
Notifiable object that marshals property changes to the UI thread.
public class ThreadSafeModel : DispatcherNotifiableObject
{
// PropertyChanged events automatically dispatched to UI thread
}
Observable Collections
ObservableCollectionEx
Extended ObservableCollection<T> with additional features.
var collection = new ObservableCollectionEx<Item>();
// Add range (fires single notification)
collection.AddRange(items);
// Remove range
collection.RemoveRange(itemsToRemove);
// Reset with new items
collection.Reset(newItems);
DispatcherObservableCollection
Thread-safe observable collection with UI dispatcher support.
var collection = new DispatcherObservableCollection<Item>();
// Safe to modify from any thread
Task.Run(() =>
{
collection.Add(new Item()); // Automatically dispatched
});
ConvertibleObservableCollection
Observable collection that transforms source items.
var models = new ObservableCollection<PersonModel>();
var viewModels = new ConvertibleObservableCollection<PersonModel, PersonViewModel>(
models,
model => new PersonViewModel(model));
// Adding to models automatically adds to viewModels
models.Add(new PersonModel());
Range Types
Range<T>
Generic range with min/max bounds.
var range = new Range<int>(1, 100);
// Check containment
bool contains = range.Contains(50); // true
bool outside = range.Contains(150); // false
// Range properties
int min = range.Min; // 1
int max = range.Max; // 100
int length = range.Length; // 99
// Range operations
var other = new Range<int>(50, 150);
var intersection = range.Intersect(other); // Range(50, 100)
var subRange = range.SubRange(20, 80); // Range(20, 80)
NumericRange
Specialized numeric range with additional operations.
var range = new NumericRange<decimal>(0, 100);
// Percentage calculations, clamping, etc.
Validation Attributes
Numeric Validation
public class Settings
{
[IntValidation(Min = 1, Max = 100)]
public int Count { get; set; }
[DoubleValidation(Min = 0.0, Max = 1.0)]
public double Factor { get; set; }
[DecimalValidation(Min = 0)]
public decimal Price { get; set; }
[LongValidation(Min = 0, Max = 1000000)]
public long Volume { get; set; }
}
TimeSpan Validation
[TimeSpanValidation(Min = "00:00:01", Max = "24:00:00")]
public TimeSpan Timeout { get; set; }
Price Validation
[PriceValidation(Min = 0)]
public Price StockPrice { get; set; }
Price Type
Financial price with type information.
var price = new Price(100.50m, PriceTypes.Limit);
// Price types
PriceTypes.Limit // Limit price
PriceTypes.Market // Market price
PriceTypes.Percent // Percentage
Attributes
Step Attribute
Define increment step for numeric properties.
[Step(0.01)]
public decimal Price { get; set; }
[Step(1)]
public int Quantity { get; set; }
Icon Attributes
[Icon("path/to/icon.png")]
public class MyCommand { }
[VectorIcon("fas fa-home")] // Font Awesome style
public class HomeCommand { }
Doc Attribute
Link to documentation.
[Doc("https://docs.example.com/my-feature")]
public class MyFeature { }
BasicSetting Attribute
Mark property as a basic (commonly used) setting.
[BasicSetting]
public string ApiKey { get; set; }
Server Credentials
Manage server connection credentials securely.
var credentials = new ServerCredentials
{
Email = "user@example.com",
Password = "secret".Secure(), // SecureString
Token = "api-token".Secure()
};
// Check if configured
bool isConfigured = credentials.IsConfigured;
Process Singleton
Ensure only one instance of an application runs.
using var singleton = new ProcessSingleton("MyApp");
if (!singleton.TryAcquire())
{
Console.WriteLine("Another instance is already running");
return;
}
// Application continues...
Dispatcher
Abstract UI thread dispatcher.
public interface IDispatcher
{
void Invoke(Action action);
Task InvokeAsync(Action action);
void BeginInvoke(Action action);
}
// Check if on UI thread
if (!dispatcher.CheckAccess())
{
dispatcher.Invoke(() => UpdateUI());
}
Channel Executor
Process items from a channel with controlled concurrency.
var executor = new ChannelExecutor<WorkItem>(
processItem: async item =>
{
await ProcessAsync(item);
},
maxConcurrency: 4);
// Add work
executor.Enqueue(new WorkItem());
// Graceful shutdown
await executor.StopAsync();
Statistics
Track simple statistics.
var stat = new Stat("ProcessedItems");
stat.Increment();
stat.Add(5);
Console.WriteLine($"Total: {stat.Value}");
Periodic Action Planner
Schedule recurring actions.
var planner = new PeriodicActionPlanner();
planner.Schedule(
TimeSpan.FromMinutes(5),
async () => await RefreshDataAsync());
// Stop scheduling
planner.Cancel();
NuGet
Install-Package Ecng.ComponentModel
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. 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 is compatible. 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
- Ecng.Localization (>= 1.0.245)
- Ecng.Serialization (>= 1.0.337)
-
net10.0
- Ecng.Localization (>= 1.0.245)
- Ecng.Serialization (>= 1.0.337)
-
net6.0
- Ecng.Localization (>= 1.0.245)
- Ecng.Serialization (>= 1.0.337)
NuGet packages (5)
Showing the top 5 NuGet packages that depend on Ecng.ComponentModel:
| Package | Downloads |
|---|---|
|
StockSharp.Localization
Localization components. More info on web site https://stocksharp.com/store/ |
|
|
Ecng.Net
Ecng system framework |
|
|
Ecng.Compilation
Ecng system framework |
|
|
Ecng.Data
Ecng system framework |
|
|
Ecng.Logging
Ecng system framework |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on Ecng.ComponentModel:
| Repository | Stars |
|---|---|
|
StockSharp/StockSharp
Algorithmic trading and quantitative trading open source platform to develop trading robots (stock markets, forex, crypto, bitcoins, and options).
|
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.428 | 350 | 2/10/2026 |
| 1.0.427 | 286 | 2/10/2026 |
| 1.0.426 | 276 | 2/10/2026 |
| 1.0.425 | 1,085 | 2/4/2026 |
| 1.0.424 | 553 | 2/4/2026 |
| 1.0.423 | 1,226 | 2/1/2026 |
| 1.0.422 | 802 | 1/26/2026 |
| 1.0.421 | 529 | 1/26/2026 |
| 1.0.420 | 535 | 1/22/2026 |
| 1.0.419 | 527 | 1/22/2026 |
| 1.0.418 | 541 | 1/21/2026 |
| 1.0.417 | 690 | 1/19/2026 |
| 1.0.416 | 501 | 1/19/2026 |
| 1.0.415 | 505 | 1/18/2026 |
| 1.0.414 | 477 | 1/18/2026 |
| 1.0.413 | 476 | 1/16/2026 |
| 1.0.412 | 613 | 1/14/2026 |
| 1.0.411 | 543 | 1/13/2026 |
| 1.0.410 | 487 | 1/13/2026 |
| 1.0.409 | 841 | 1/9/2026 |