カスタム ビュー バインディングがあるカスタム カレンダー コントロールがあります。このビューバインディングでは、適切に分離されていないいくつかのイベントを接続しているため、ガベージ コレクションが完了していません。以下は、カスタム ビュー バインディングです。ご覧のとおり、イベントはコンストラクターにフックされ、OnSelectedDate イベントがトリガーされます (ユーザーが日付を選択します)。したがって、日付を選択すると、イベントは適切に分離され、ガベージ コレクションが行われますが、単に前に戻ると、イベントは引き続きフックされ、ガベージ コレクションは実行されません。null値でイベントをトリガーし、それによってイベントをデコルプすることを考えました。しかし、これを達成するにはもっと賢い方法が必要だと思います。
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;
}
}
}
}
どんな助けでも大歓迎です:)