--- no-loc: [appsettings.json, "ASP.NET Core Identity", cookie, Cookie, Blazor, "Blazor Server", "Blazor WebAssembly", "Identity", "Let's Encrypt", Razor, SignalR] --- Nested components typically bind data using *chained bind* as described in . Nested and un-nested components can share access to data using a registered in-memory state container. A custom state container class can use an assignable to notify components in different parts of the app of state changes. In the following example: * A pair of components uses a state container to track a property. * The components of the example are nested, but nesting isn't required for this approach to work. `StateContainer.cs`: ```csharp public class StateContainer { public string Property { get; set; } = "Initial value from StateContainer"; public event Action OnChange; public void SetProperty(string value) { Property = value; NotifyStateChanged(); } private void NotifyStateChanged() => OnChange?.Invoke(); } ``` In `Program.Main` (Blazor WebAssembly): ```csharp builder.Services.AddSingleton(); ``` In `Startup.ConfigureServices` (Blazor Server): ```csharp services.AddSingleton(); ``` `Pages/Component1.razor`: ```razor @page "/Component1" @inject StateContainer StateContainer @implements IDisposable

Component 1

Component 1 Property: @StateContainer.Property

@code { protected override void OnInitialized() { StateContainer.OnChange += StateHasChanged; } private void ChangePropertyValue() { StateContainer.SetProperty($"New value set in Component 1: {DateTime.Now}"); } public void Dispose() { StateContainer.OnChange -= StateHasChanged; } } ``` `Shared/Component2.razor`: ```razor @inject StateContainer StateContainer @implements IDisposable

Component 2

Component 2 Property: @StateContainer.Property

@code { protected override void OnInitialized() { StateContainer.OnChange += StateHasChanged; } private void ChangePropertyValue() { StateContainer.SetProperty($"New value set in Component 2: {DateTime.Now}"); } public void Dispose() { StateContainer.OnChange -= StateHasChanged; } } ``` The preceding components implement , and the `OnChange` delegates are unsubscribed in the `Dispose` methods, which are called by the framework when the components are disposed. For more information, see .