我有一个自定义日历控件,它有一个自定义视图绑定。在这个视图绑定中,我们连接了一些未正确解耦的事件,因此垃圾收集未完成。下面是我们的自定义视图绑定。如您所见,事件在构造函数中连接,并在触发 OnSelectedDate 事件时解耦(用户选择日期)。因此,如果您选择一个日期,则事件解耦正确并被垃圾收集,但如果您只是返回,该事件仍处于关联状态且不执行垃圾收集。我考虑过用空值触发事件,从而解除事件。但我认为必须有一些更聪明的方法来实现这一点。
namespace CmsApp.Core.Binders
{
public class CalendarViewBinding:MvxBaseTargetBinding
{
private CalendarView _calendarView;
private DateTime _currentValue;
public CalendarViewBinding(CalendarView calendarView)
{
_calendarView = calendarView;
_calendarView.OnDateSelected+=OnDateSelected;
}
protected override void Dispose(bool isDisposing)
{
if(_calendarView!=null)
{
_calendarView.OnDateSelected -= OnDateSelected;
_calendarView = null;
}
base.Dispose(isDisposing);
}
private void OnDateSelected(object sender, SelectedDateEventArgs args)
{
_currentValue = args.SelectedDate;
this.FireValueChanged(_currentValue);
_calendarView.OnDateSelected -= OnDateSelected;
}
public override void SetValue(object value)
{
var date = (DateTime)value;
_currentValue = date;
_calendarView.SelectedDate = _currentValue;
}
public override Type TargetType
{
get
{
return typeof(DateTime);
}
}
public override MvxBindingMode DefaultMode
{
get
{
return MvxBindingMode.TwoWay;
}
}
}
}
任何帮助表示赞赏:)