_parameter.WeakSubscribe(() => _parameter.Value, HandleValueChanged);
我像上面那样使用WeakSubscribe。
我的方案是当值发生变化时,系统会添加一个新参数,当前将取消订阅该事件。
我找到了this question,但它没有用。
答案 0 :(得分:6)
如果您使用以下内容订阅:
_token = thing.WeakSubscribe(() => parameter.Value, HandleValueChanged);
然后您可以使用以下方式取消订阅:
_token.Dispose();
_token = null;
这会调用https://github.com/MvvmCross/MvvmCross/blob/v3.1/CrossCore/Cirrious.CrossCore/WeakSubscription/MvxWeakEventSubscription.cs#L91中的Dispose
代码:
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
RemoveEventHandler();
}
}
private void RemoveEventHandler()
{
if (!_subscribed)
return;
var source = (TSource) _sourceReference.Target;
if (source != null)
{
_sourceEventInfo.GetRemoveMethod().Invoke(source, new object[] {CreateEventHandler()});
_subscribed = false;
}
}