我在这种情况下,我必须新建一个ViewModel,它有一个事件,并基于用户选择的视图,我可能需要在这个和其他具有相同界面的ViewModel之间来回交换,每次他们都必须获得更新的数据。这些ViewModel包含了我需要显示的ViewModel列表。
是否可以在通常的Dispose方法之外以这种方式分离和附加到事件?
if (_animalsListVm is not null)
{
_animalsListVm.MyEvent -= Handle_MyEvent;
}
_animalsListVm = MakeListViewModel();
_animalsListVm.MyEvent += Handle_MyEvent;
await _animalsListVm.InitializeAsync();
假定这段代码可能是混乱的,我正在使用Blazor,我试图找到一种替代的枚举或布尔值来显示组件,所以我决定根据当前ViewModel的具体类型切换视图。
在dispose方法之外附加和分离事件通常是可以的。
在某些情况下,这样的模式可能更可取:
public IDisposable RegisterForEvent(Action<EventArguments> eventHandler);
这遵循典型的处理模式。如果您需要在注册或取消注册事件时做一些工作,那么这种模式可能是更可取的。您可以对常规事件执行相同的操作,但我通常不希望事件注册执行任何耗时的工作。
然而,我不是初始化方法的粉丝。虽然它们很难避免,但我更喜欢在构造函数返回时完全构造的对象,例如:
_animalsListVm?.Dispose();
_animalsListVm = await MakeListViewModel(Handle_MyEvent);