如何利用MudSelect下拉框触发OnManufacturerChanged方法?
解决MudSelect值变更触发方法的问题
针对你使用MudSelect时,需要在_selectedManufacturer每次变更时触发OnManufacturerChanged()的需求,有两种可靠的实现方式:
方法一:拆分绑定语法糖,使用ValueChanged事件
把@bind-Value拆分为Value和ValueChanged,直接在事件中处理值更新与方法调用:
<MudSelect T="ManufacturerDto" Label="Select Manufacturer" Value="@_selectedManufacturer" ValueChanged="@(manufacturer => { _selectedManufacturer = manufacturer; OnManufacturerChanged(); })" Variant="Variant.Outlined"> @foreach (var manufacturer in _filteredManufacturers) { <MudSelectItem T="ManufacturerDto" Value="@manufacturer">@manufacturer.ManufacturerName</MudSelectItem> } </MudSelect>
这种方式最直接,每次选中项变更时会立刻触发方法,不会出现延迟或多次触发的问题。
方法二:通过属性Setter触发方法
如果不想修改UI代码,可以在_selectedManufacturer的Setter中加入方法调用逻辑:
private ManufacturerDto _selectedManufacturer; public ManufacturerDto SelectedManufacturer { get => _selectedManufacturer; set { if (_selectedManufacturer != value) { _selectedManufacturer = value; OnManufacturerChanged(); } } }
之后在UI中绑定这个属性即可:
<MudSelect T="ManufacturerDto" Label="Select Manufacturer" @bind-Value="SelectedManufacturer" Variant="Variant.Outlined"> @foreach (var manufacturer in _filteredManufacturers) { <MudSelectItem T="ManufacturerDto" Value="@manufacturer">@manufacturer.ManufacturerName</MudSelectItem> } </MudSelect>
这种方式把逻辑封装在属性内,UI代码更简洁,同样能保证值变更时立刻触发方法。
注意:不要使用OnClick、OnClose这类事件,它们的触发时机与值变更时机不匹配,会导致你遇到的延迟或无效问题。
内容的提问来源于stack exchange,提问作者Haris Tirić
相关产品推荐
相关产品推荐

