@@ -184,19 +184,25 @@ public partial class EditorForm<TModel> : IShowLabel
184
184
/// </summary>
185
185
private readonly List < IEditorItem > _editorItems = [ ] ;
186
186
187
- /// <summary>
188
- /// 获得/设置 渲染的编辑项集合
189
- /// </summary>
190
- [ NotNull ]
191
- private List < IEditorItem > ? _formItems = null ;
187
+ private IEnumerable < IEditorItem > UnsetGroupItems => RenderItems . Where ( i => string . IsNullOrEmpty ( i . GroupName ) && i . IsVisible ( ItemChangedType , IsSearch . Value ) ) ;
192
188
193
- private IEnumerable < IEditorItem > UnsetGroupItems => _formItems . Where ( i => string . IsNullOrEmpty ( i . GroupName ) && i . IsVisible ( ItemChangedType , IsSearch . Value ) ) ;
194
-
195
- private IEnumerable < KeyValuePair < string , IOrderedEnumerable < IEditorItem > > > GroupItems => _formItems
189
+ private IEnumerable < KeyValuePair < string , IOrderedEnumerable < IEditorItem > > > GroupItems => RenderItems
196
190
. Where ( i => ! string . IsNullOrEmpty ( i . GroupName ) && i . IsVisible ( ItemChangedType , IsSearch . Value ) )
197
191
. GroupBy ( i => i . GroupOrder ) . OrderBy ( i => i . Key )
198
192
. Select ( i => new KeyValuePair < string , IOrderedEnumerable < IEditorItem > > ( i . First ( ) . GroupName ! , i . OrderBy ( x => x . Order ) ) ) ;
199
193
194
+ private bool _inited ;
195
+ private List < IEditorItem > ? _itemsCache ;
196
+
197
+ private List < IEditorItem > RenderItems
198
+ {
199
+ get
200
+ {
201
+ _itemsCache ??= GetRenderItems ( ) ;
202
+ return _itemsCache ;
203
+ }
204
+ }
205
+
200
206
/// <summary>
201
207
/// OnInitialized 方法
202
208
/// </summary>
@@ -217,7 +223,6 @@ protected override void OnInitialized()
217
223
218
224
// 统一设置所有 IEditorItem 的 PlaceHolder
219
225
PlaceHolderText ??= Localizer [ nameof ( PlaceHolderText ) ] ;
220
-
221
226
IsSearch ??= false ;
222
227
}
223
228
@@ -230,66 +235,75 @@ protected override void OnParametersSet()
230
235
231
236
// 为空时使用级联参数 ValidateForm 的 ShowLabel
232
237
ShowLabel ??= ValidateForm ? . ShowLabel ;
233
- _formItems = null ;
238
+ _itemsCache = null ;
234
239
}
235
240
236
- private bool _inited ;
237
-
238
- private Task OnRenderAsync ( bool firstRender )
241
+ /// <summary>
242
+ /// <inheritdoc/>
243
+ /// </summary>
244
+ /// <param name="firstRender"></param>
245
+ protected override async Task OnAfterRenderAsync ( bool firstRender )
239
246
{
247
+ await base . OnAfterRenderAsync ( firstRender ) ;
248
+
240
249
if ( firstRender )
241
250
{
251
+ foreach ( var item in RenderItems )
252
+ {
253
+ if ( item . Lookup == null && ! string . IsNullOrEmpty ( item . LookupServiceKey ) )
254
+ {
255
+ var lookupServcie = item . LookupService ?? LookupService ;
256
+ item . Lookup = await lookupServcie . GetItemsAsync ( item . LookupServiceKey , item . LookupServiceData ) ;
257
+ }
258
+ }
242
259
_inited = true ;
243
260
StateHasChanged ( ) ;
244
261
}
245
- return Task . CompletedTask ;
246
262
}
247
263
248
- private void ResetItems ( )
264
+ private List < IEditorItem > GetRenderItems ( )
249
265
{
250
- if ( _formItems == null )
266
+ var items = new List < IEditorItem > ( ) ;
267
+ if ( Items != null )
251
268
{
252
- _formItems = [ ] ;
253
- if ( Items != null )
254
- {
255
- _formItems . AddRange ( Items . Where ( i => ! i . GetIgnore ( ) && ! string . IsNullOrEmpty ( i . GetFieldName ( ) ) ) ) ;
256
- }
257
- else
269
+ items . AddRange ( Items . Where ( i => ! i . GetIgnore ( ) && ! string . IsNullOrEmpty ( i . GetFieldName ( ) ) ) ) ;
270
+ }
271
+ else
272
+ {
273
+ // 如果 EditorItems 有值表示 用户自定义列
274
+ if ( AutoGenerateAllItem )
258
275
{
259
- // 如果 EditorItems 有值表示 用户自定义列
260
- if ( AutoGenerateAllItem )
261
- {
262
- // 获取绑定模型所有属性
263
- var items = Utility . GetTableColumns < TModel > ( defaultOrderCallback : ColumnOrderCallback ) . ToList ( ) ;
276
+ // 获取绑定模型所有属性
277
+ var columns = Utility . GetTableColumns < TModel > ( defaultOrderCallback : ColumnOrderCallback ) . ToList ( ) ;
264
278
265
- // 通过设定的 FieldItems 模板获取项进行渲染
266
- foreach ( var el in _editorItems )
279
+ // 通过设定的 FieldItems 模板获取项进行渲染
280
+ foreach ( var el in _editorItems )
281
+ {
282
+ var item = columns . FirstOrDefault ( i => i . GetFieldName ( ) == el . GetFieldName ( ) ) ;
283
+ if ( item != null )
267
284
{
268
- var item = items . FirstOrDefault ( i => i . GetFieldName ( ) == el . GetFieldName ( ) ) ;
269
- if ( item != null )
285
+ // 过滤掉不编辑与不可见的列
286
+ if ( el . GetIgnore ( ) || ! el . IsVisible ( ItemChangedType , IsSearch . Value ) || string . IsNullOrEmpty ( el . GetFieldName ( ) ) )
270
287
{
271
- // 过滤掉不编辑与不可见的列
272
- if ( el . GetIgnore ( ) || ! el . IsVisible ( ItemChangedType , IsSearch . Value ) )
273
- {
274
- items . Remove ( item ) ;
275
- }
276
- else
277
- {
278
- // 设置只读属性与列模板
279
- item . CopyValue ( el ) ;
280
- }
288
+ columns . Remove ( item ) ;
289
+ }
290
+ else
291
+ {
292
+ // 设置只读属性与列模板
293
+ item . CopyValue ( el ) ;
281
294
}
282
295
}
283
- _formItems . AddRange ( items . Where ( i => ! string . IsNullOrEmpty ( i . GetFieldName ( ) ) ) ) ;
284
- }
285
- else
286
- {
287
- _formItems . AddRange ( _editorItems . Where ( i => ! i . GetIgnore ( )
288
- && ! string . IsNullOrEmpty ( i . GetFieldName ( ) )
289
- && i . IsVisible ( ItemChangedType , IsSearch . Value ) ) ) ;
290
296
}
297
+ items . AddRange ( columns ) ;
298
+ }
299
+ else
300
+ {
301
+ items . AddRange ( _editorItems . Where ( i => ! i . GetIgnore ( )
302
+ && ! string . IsNullOrEmpty ( i . GetFieldName ( ) )
303
+ && i . IsVisible ( ItemChangedType , IsSearch . Value ) ) ) ;
291
304
}
292
305
}
306
+ return items ;
293
307
}
294
308
295
309
private RenderFragment AutoGenerateTemplate ( IEditorItem item ) => builder =>
@@ -301,7 +315,7 @@ private RenderFragment AutoGenerateTemplate(IEditorItem item) => builder =>
301
315
else
302
316
{
303
317
item . PlaceHolder ??= PlaceHolderText ;
304
- builder . CreateComponentByFieldType ( this , item , Model , ItemChangedType , IsSearch . Value , LookupService ) ;
318
+ builder . CreateComponentByFieldType ( this , item , Model , ItemChangedType , IsSearch . Value ) ;
305
319
}
306
320
} ;
307
321
0 commit comments