|
1 | | -// Licensed to the .NET Foundation under one or more agreements. |
| 1 | +// Licensed to the .NET Foundation under one or more agreements. |
2 | 2 | // The .NET Foundation licenses this file to you under the Apache 2.0 License |
3 | 3 | // See the LICENSE file in the project root for more information. |
4 | 4 | // Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone |
@@ -152,6 +152,12 @@ public partial class TreeView<TItem> : IModelEqualityComparer<TItem> |
152 | 152 | [Parameter] |
153 | 153 | public Func<TreeViewItem<TItem>, Task>? OnTreeItemClick { get; set; } |
154 | 154 |
|
| 155 | + /// <summary> |
| 156 | + /// 获得/设置 点击节点前回调方法 |
| 157 | + /// </summary> |
| 158 | + [Parameter] |
| 159 | + public Func<TreeViewItem<TItem>, Task<bool>>? OnBeforeTreeItemClick { get; set; } |
| 160 | + |
155 | 161 | /// <summary> |
156 | 162 | /// Gets or sets the callback method when a tree item is checked. |
157 | 163 | /// </summary> |
@@ -379,7 +385,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender) |
379 | 385 | await InvokeVoidAsync("scroll", Id, ScrollIntoViewOptions); |
380 | 386 | } |
381 | 387 |
|
382 | | - if(!firstRender && AllowDrag) |
| 388 | + if (!firstRender && AllowDrag) |
383 | 389 | { |
384 | 390 | await InvokeVoidAsync("resetTreeViewRow", Id); |
385 | 391 | } |
@@ -590,24 +596,33 @@ private async Task<IEnumerable<IExpandableNode<TItem>>> GetChildrenRowAsync(Tree |
590 | 596 |
|
591 | 597 | private async Task OnClick(TreeViewItem<TItem> item) |
592 | 598 | { |
593 | | - _activeItem = item; |
594 | | - if (ClickToggleNode && item.CanTriggerClickNode(IsDisabled, CanExpandWhenDisabled)) |
| 599 | + var confirm = true; |
| 600 | + if (OnBeforeTreeItemClick != null) |
595 | 601 | { |
596 | | - await OnToggleNodeAsync(item); |
| 602 | + confirm = await OnBeforeTreeItemClick(item); |
597 | 603 | } |
598 | 604 |
|
599 | | - if (OnTreeItemClick != null) |
| 605 | + if (confirm) |
600 | 606 | { |
601 | | - await OnTreeItemClick(item); |
602 | | - } |
| 607 | + _activeItem = item; |
| 608 | + if (ClickToggleNode && item.CanTriggerClickNode(IsDisabled, CanExpandWhenDisabled)) |
| 609 | + { |
| 610 | + await OnToggleNodeAsync(item); |
| 611 | + } |
603 | 612 |
|
604 | | - if (ShowCheckbox && ClickToggleCheck) |
605 | | - { |
606 | | - var state = ToggleCheckState(item.CheckedState); |
607 | | - await OnCheckStateChanged(item, state); |
608 | | - } |
| 613 | + if (OnTreeItemClick != null) |
| 614 | + { |
| 615 | + await OnTreeItemClick(item); |
| 616 | + } |
609 | 617 |
|
610 | | - StateHasChanged(); |
| 618 | + if (ShowCheckbox && ClickToggleCheck) |
| 619 | + { |
| 620 | + var state = ToggleCheckState(item.CheckedState); |
| 621 | + await OnCheckStateChanged(item, state); |
| 622 | + } |
| 623 | + |
| 624 | + StateHasChanged(); |
| 625 | + } |
611 | 626 | } |
612 | 627 |
|
613 | 628 | private async Task OnEnterAsync(string? searchText) |
|
0 commit comments