Course contentsShow
← C#
Lesson 1327 of 1,90812. Modern Frontend with Razor and BlazorFree lesson

Cascading Values and Parameters

Share global application state across complex component trees without prop drilling.

In this lesson, you will learn how to bypass tedious "prop drilling" by sharing state across deep component hierarchies using Cascading Values and Parameters.

The Problem: Prop Drilling

Up until now, to share data between a parent and a deeply nested child, you had to pass parameters through every intermediate component. This creates "prop drilling," where components in the middle end up passing data they don't even use just to satisfy their children.

The Solution: Cascading Values

Cascading values allow you to "broadcast" a piece of data from a parent component down to any descendant, no matter how many layers deep they are, without involving the intermediate components.

To implement this, you wrap your component tree in a <CascadingValue> component and use the [CascadingParameter] attribute to receive it.

Example

In your root layout or a high-level parent component:

<CascadingValue Value="UserTheme">
    <NavigationMenu />
    <MainContent />
</CascadingValue>

@code {
    private string UserTheme = "dark-mode";
}

Now, any component within the MainContent tree can access this value immediately:

<div class="@CurrentTheme">
    <p>Welcome to the dashboard.</p>
</div>

@code {
    [CascadingParameter]
    public string CurrentTheme { get; set; }
}

Why it Matters

Think of CascadingValue as a signal broadcaster. The parent acts as the antenna, and any child component can "tune in" to the signal by declaring a [CascadingParameter] with a matching type. You no longer need to write boilerplate code in every middle-man component just to move data from the top of the tree to the bottom.

This approach is highly efficient for global state like user authentication status, theme preferences, or culture settings—things that virtually every part of your UI needs to be aware of. By removing the dependency chain, your code becomes cleaner, easier to maintain, and significantly less fragile.

Key Takeaway: Cascading values allow you to provide data to an entire sub-tree of components, effectively eliminating the need to pass information through intermediate layers that don't need it.