Этот вопрос похож на другой вопрос, который я задал , но тогда как в этом случае я хотел знать о принудительной привязке к обновлению из XAML или модели представления, в данном случае я хотел бы знать об упаковке в пользовательский WPF FrameworkElement
.
Функциональность, за которой я работаю, - это фрагмент текста, который указывает, как давно что-то произошло.
<TextBlock Text="It happened " />
<my:AgeTextBlock SinceTime="{Binding OccurredAtUtc}" />
<TextBlock Text=" ago" />
Это будет выглядеть как (например):
Это произошло 1 мин 13 сек назад
У меня есть код, который преобразуется из TimeSpan
в читаемую человеком форму.
Чтобы обновлять пользовательский интерфейс каждую секунду, я рассматриваю возможность использования статического DispatcherTimer
(идея из ответа Кента Бугаарта ).
Итак, вот что у меня есть:
public class AgeTextBlock : TextBlock
{
private static readonly DispatcherTimer _timer;
static AgeTextBlock()
{
_timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) };
}
public AgeTextBlock()
{
_timer.Tick += ...;
}
// How can I unsubscribe from the Tick event to avoid a memory leak?
}
Комментарий указывает на мою проблему. Я не могу понять, как бы я убрал правильно с таким подходом. Нет Dispose
метода для переопределения и удаления обработчика событий.
Какой рекомендуемый шаблон здесь?