IgbTree でノードを選択したときに、選択されているノードに紐づいているデータを取得したいといったことがあると思います。

その場合は、IgbTreeItem の Value パラメーター(object 型)が任意の用途で使用できますので、それを活用してください。

例えば Value パラメーターに元データの主キーなどを格納しておくことで、OnSelectionChanged イベントハンドラー内にて、選択されたツリーアイテムから、その Value パラメーター値を参照することで、バインド元のデータまでたどることが可能です。

@inject IJSRuntime JSRuntime
... (中略) ...
<IgbTree Selection="TreeSelection.Cascade" SelectionChanged="OnSelectionChanged">

    @foreach (var item in _SampleData)
    {
        @* IgbTreeItem の Value パラメーターに、バインド元のレコードのユニークID値を格納できます。 *@
        <IgbTreeItem Label="@item.Name" Value="@item.Id">
            @if (item.Children != null)
            {
                @foreach (var child in item.Children)
                {
                    <IgbTreeItem Label="@child.Name" Value="@child.Id"></IgbTreeItem>
                }
            }
        </IgbTreeItem>
    }
</IgbTree>

@code {
    /// <summary>サンプル用のデータ型です。</summary>
    private record CountryData(int Id, string Name, string JPName, IEnumerable<CountryData>? Children = null);

   ... (中略) ...

    /// <summary>
    /// ツリーアイテムの選択状態が変更されたときに呼び出され、選択されているツリーアイテムの Value パラメーター値をもとに、
    /// バインド元のレコードを特定し、日本語名を取り出してブラウザの alert で表示します。
    /// </summary>
    private async Task OnSelectionChanged(IgbTreeSelectionOptionsEventArgs args)
    {
        // 選択されたツリーアイテムから Value パラメーター値を収集
        var selectedItemValues = args
            .Detail
            .NewSelection
            .Select(item => item.Value);

        var selectedData = _SampleData
            // 2階層構造のバインド元のレコードを1次元構造にフラットに展開し、
            .SelectMany(data => new[] { data }.Concat(data.Children ?? Enumerable.Empty<CountryData>()))
            // Id の値が、選択されたツリーアイテムの Value パラメータに含まれるレコードを抽出、
            .Where(data => selectedItemValues.Contains(data.Id))
            // 日本語名を取り出す
            .Select(data => data.JPName);

        // 結果をブラウザの alert で表示
        await this.JSRuntime.InvokeVoidAsync("alert", "選択されたアイテムの日本語名: " + string.Join(", ", selectedData));
    }
}

 

実行結果

 

 

Tagged:

製品について

Ignite UI for Blazor