---
title: Notify modified-state change
summary: Raises the single-object change notification event for the current bindable instance.
status: draft
owner: SAIF Team
last_reviewed: 2026-07-30
library: SAIF.Framework.Bindable
reference_type: package
operation_id: OP-BIND-001
trigger: Subclass call to OnIsModifiedChanged()
---

# Notify modified-state change

This operation is `clsBindableBase`'s single-object change-notification hook. A subclass calls it after deciding — by whatever logic it implements — that its own state has changed, and the base class takes care of safely relaying that fact to any attached listener (typically a data-bound UI control).

| Field | Value |
| --- | --- |
| **Operation ID** | `OP-BIND-001` |
| **Trigger** | Subclass call to `OnIsModifiedChanged()`. |
| **Inputs** | None. |
| **Outputs** | `IsModifiedChanged(this, EventArgs.Empty)` when a subscriber is attached; otherwise no side effect. |
| **Primary components** | `clsBindableBase.OnIsModifiedChanged` |
| **Entry point** | `SAIF.Framework.Bindable\clsBindableBase.cs` |

## Steps

1. A subclass calls `OnIsModifiedChanged()` on the current `clsBindableBase` instance — this is the only way the operation begins; nothing in the base class calls it automatically.
2. The method checks whether the `IsModifiedChanged` event delegate is non-null, i.e., whether at least one listener has subscribed.
3. If a subscriber is attached, the method invokes `IsModifiedChanged(this, EventArgs.Empty)`, passing the bindable instance itself as the sender and an empty event-argument payload.
4. If no subscriber is attached, the method returns immediately without raising an event and without throwing — the null check guards the invocation.

## Process flow

The following diagram visualizes this operation's control flow.

```mermaid
flowchart TD
	Start([Subclass calls OnIsModifiedChanged]) --> Check{Subscriber attached?}
	Check -->|Yes| Raise[Invoke IsModifiedChanged<br>with this and EventArgs.Empty]
	Check -->|No| NoOp([Return without side effects])
	Raise --> EndOk([Notification delivered])
```

## Failure and edge-case behavior

- No subscriber attached: the method exits quietly rather than throwing, because it guards the delegate invocation with a null check — contrast this with [Publish rule-status notification](rule-status-notification.md), whose equivalent methods invoke their delegates unguarded.

## Related documentation
- [Operations and processes](../operations-processes.md)
- [Business rules](../business-rules.md)

## Sources
- `SAIF.Framework.Bindable\clsBindableBase.cs`
