首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从他人组件事件中的组件中触发属性

从他人组件事件中的组件中触发属性
EN

Stack Overflow用户
提问于 2022-07-21 07:11:46
回答 1查看 31关注 0票数 0

我有以下家长剃须刀组件,这是主桌,它被分割成小部件:

代码语言:javascript
复制
<div class="row">
    <TopSection DeleteCss="@deleteCssStyle" />
</div>

<div class="row">
    <div class="col-1">
        <div>
            <a href="" class="fs-4 fw-bold">
                <span class="oi oi-loop-circular text-black rotate-45"></span>
            </a>
        </div>
        <div>
            <a href="" class="fs-4 fw-bold">
                <span class="oi oi-account-logout text-black rotate-180"></span>
            </a>
        </div>
    </div>
    <div class="col-11">
        <div class="table-responsive" id="pay-table">
            <table class="table table-striped table-borderless">
                <TableHeader ... />
                <TableBody Items="@filteredList" OnCheckRow="@OnCheckRow" />
                <TableFooter ... />
            </table>
        </div>
    </div>
</div>

The TopSection

代码语言:javascript
复制
<div class="col-4">
    <a href="javascript:void(0)" class="btn">Edit</a>
    <a href="javascript:void(0)" class="btn">Add</a>
    <a href="javascript:void(0)" class="btn @DeleteCss">Delete</a>
</div>

代码背后:

代码语言:javascript
复制
[Parameter]
public string DeleteCss { get; set; } = "disabled";

OnCheckRow

代码语言:javascript
复制
protected void OnCheckRow(int checkedRows)
{
    deleteCssStyle = checkedRows > 0 ? "" : "disabled";
}

The TableBody

代码语言:javascript
复制
<tbody>
    @{
        foreach (var row in Items)
        {
            <tr @onclick="@((e)=> OnCheck(row) )">
                <td>
                    <EditForm Model="@row" class="form-check-inline">
                        <InputCheckbox @bind-Value="@row.IsChecked" id="@row.Id" />
                    </EditForm>
                    @row.Title
                </td>
                ...
                ...
            </tr>
        }
    }
</tbody>

以及背后的代码:

代码语言:javascript
复制
[Parameter]
public Action<int> OnCheckRow { get; set; } = (i) => { };

protected void OnCheck(MyItem row)
{
     row.IsChecked = !row.IsChecked;
     OnCheckRow?.Invoke(Items.Count(s => s.IsChecked));
}

因此,我希望在检查至少一项时,希望“删除”按钮可用,否则添加“禁用”类以避免单击它。

似乎在触发器单击时,deleteCssStyle的属性在TopAction组件中也没有更新,删除按钮仍然被禁用。

我在这里迷路了。我想在这里寻求帮助。

稍后编辑/解析

对于EventCallback,我不得不使用OnCheckRow而不是Action

代码语言:javascript
复制
[Parameter]
public EventCallback<int> OnCheckRow { get; set; }

protected async Task OnCheck(PayComponentListItem row)
{    row.IsChecked = !row.IsChecked;
     await OnCheckRow.InvokeAsync(Items.Count(s => s.IsChecked));}

而且会像魅力一样发挥作用!

EN

回答 1

Stack Overflow用户

发布于 2022-07-21 07:25:16

尝试这个解决方案,您可以使用LINQ进行测试。

代码语言:javascript
复制
protected void OnCheckRow(int checkedRows)
{
   deleteCssStyle = Items.Any(x=> x.Ischecked) ? "" : "disabled;
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73062053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档