У меня есть индикатор выполнения, привязанный к 2 целочисленным значениям - одно - общее количество секунд, а другое - оставшиеся секунды (отсчет по таймеру: всегда <= общее количество секунд). </p>
У меня есть набор данных LayoutRoot для моего объекта верхнего уровня (для которого BlindSet является свойством - см. Код).
Когда я запускаю проект, индикатор выполнения обновляется идеально. Отсчитывает количество секунд, как и ожидалось. Затем я изменяю текст данных, создавая новый объект и устанавливая его в класс BlindSet. Я использую события уведомления DataChanged, чтобы пользовательский интерфейс знал, что он изменился. Это также хорошо работает - все остальные элементы управления, кроме индикатора прогресса, обновляются соответствующим образом.
Это сбило меня с толку, поэтому я упростил это до:
2 текстовых блока и индикатор выполнения, все привязаны к одним и тем же значениям. Текст данных установлен выше, поэтому он одинаков для всех.
В текстовых блоках отображаются правильные значения при обратном отсчете. (BlindSet.TimeLeftInCurrentBlind.TotalSeconds ведет обратный отсчет по таймеру), но индикатор выполнения никогда не обновляется после изменения текстового контекста. Я даже попытался повторно связать его после изменения текста данных, но это не помогло.
Я также привязываю всплывающую подсказку на индикаторе выполнения к тому же значению, на котором установлено значение Значение - и когда вы наводите курсор мыши на не обновляемый индикатор выполнения, вы можете видеть, что он ведет обратный отсчет ... но индикатор выполнения не отображается это.
Либо я делаю что-то действительно глупое (возможно;), либо это ошибка в элементе управления индикатора выполнения.
XAML:
<TextBlock Text="{Binding BlindSet.CurrentBlind.SecondsPerBlind}" />
<TextBlock Text="{Binding BlindSet.TimeLeftInCurrentBlind.TotalSeconds}" />
<ProgressBar Minimum="0" Maximum="{Binding BlindSet.CurrentBlind.SecondsPerBlind}" Value="{Binding BlindSet.TimeLeftInCurrentBlind.TotalSeconds}" ToolTipService.ToolTip="{Binding BlindSet.TimeLeftInCurrentBlind.SecondsPerBlind}" />
Код:
LayoutRoot.DataContext = tournament;
турнир имеет объект BlindSet, но я не думаю, что это является частью проблемы, так как другие элементы управления обновляются нормально:
public Blindset BlindSet
{
get { return blindset; }
set
{
if (blindset != value)
{
blindset = value;
OnPropertyChanged("BlindSet");
OnPropertyChanged("CurrentBlind");
}
}
}
Обновление : Возможно, существует некоторое внутреннее состояние, которое необходимо повторно инициализировать с новыми значениями max и value при изменении текста данных (значения сильно различаются, например, 1200 секунд или 120 секунд).
Когда я связываюсь с новым объектом BlindSet с теми же значениями (например, 1200 секунд), тогда он работает, как и ожидалось - поэтому я думаю, что мне нужно как-то дать ему толчок, чтобы пересчитать изменения малого или большого значения - любая идея, как ?!