Есть много способов справиться с этим, в зависимости от вашей ситуации
Во-первых, вы можете просто распознать тот факт, что объект может быть не инициализирован, и проверить это перед обработкой.Например,
if (counter.Text != null)
counter.Text = e.NewValue.ToString();
Во-вторых, вы можете прикрепить свои события к событию Loaded объекта, чтобы они не срабатывали до тех пор, пока объект не будет инициализирован.
void Counter_Loaded(object sender, EventArgs e)
{
slider.ValueChanged += Slider_ValueChanged;
}
void Counter_Unloaded(object sender, EventArgs e)
{
slider.ValueChanged -= Slider_ValueChanged;
}
Ии наконец, вы можете использовать WPF Dispatcher для запуска событий в потоке пользовательского интерфейса с другим DispatcherPriority .По умолчанию используется значение Normal
, которое выполняется после операций Loaded
, Render
и DataBind
Dispatcher.BeginInvoke(DispatcherPriority.DataBind,
new Action(delegate() { counter.Text = e.NewValue.ToString(); }));