Я работаю на временной шкале, которая помечает области аудиосигналов, когда пользователь нажимает кнопку «Пуск» и «Стоп». Пользователь может нажимать кнопку запуска и остановки несколько раз во время сеанса выборки, и время между нажатиями должно отображаться на временной шкале в виде выделенных разделов.
Общий дизайн - это ItemsControl, у которого ItemsPanelTemplate - пользовательская панель. Каждая панель представляет собой звуковую дорожку. Панель имеет свойство зависимостей StartTime и EndTime, которое привязано к данным свойств StartControl и End of UserControl, так что я могу контролировать количество времени просмотра всех дорожек из одной пары свойств. ItemsControl связан с ObservableCollection, а Track является ObservableCollection. Намерение здесь состоит в том, что, когда я добавляю новое выделение, это обновляет трек, а затем я добавляю / перезаписываю трек в ObservableCollection, что должно автоматически обновлять мой графический интерфейс.
Выделение выглядит так:
public class Highlight
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
public string Description { get; set; }
public Highlight() {}
public Highlight(DateTime start, DateTime end, string description)
{
Start = start;
End = end;
Description = description;
}
}
Я полагаю, что у меня правильно закодированы пользовательский контроль и панель, за исключением одной маленькой детали (на самом деле, самой важной). Когда я нажимаю Start и Stop, я добавляю новый экземпляр Highlight в OC и устанавливаю обычные свойства C # Description, Start и End.
Когда пользователь нажимает кнопку «Конец», и все объекты обновляются, в конце концов вызывается ArrangeOverride для моей Panel, и мне нужно получить свойства Highlight Start и End. Это позволяет мне рассчитать смещение от времени начала трека и нарисовать выделение в нужном месте. Проблема в том, что у меня есть только элементы UIE, с которыми можно работать (Дети группы). Я не могу привести это к своему объекту Highlight, поэтому я предполагаю, что мне нужно где-то настроить привязку данных для Highlight в XAML, чтобы он автоматически извлекал правильное значение свойства C #.
Извините за длинное описание, но я думаю, что моя проблема сводится к этому единственному вопросу - как мне настроить XAML или код позади так, чтобы UIE-элементы моей Panel были правильно привязаны к базовым экземплярам Highlight?
Большое спасибо за помощь заранее. Я многому научился у всех присутствующих на SO, но, несомненно, мне предстоит пройти долгий путь, прежде чем я овладею этими темами.
РЕДАКТИРОВАТЬ - Я был неправ, моя привязка данных для начала и конца для каждого трека не работала. У меня было свойство DependencyProperty в моем UserControl для каждого, и я подумал, что могу привязать к ним данные из XAML, чтобы принудительно изменить размер панели Track, следующим образом:
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="local:Track.StartTime" Value="{Binding Path=Start}"/>
<Setter Property="local:Track.EndTime" Value="{Binding Path=End}"/>
</Style>
</ItemsControl.ItemContainerStyle>
но это не сработало. Я думаю, мне нужно сначала выяснить это, потому что если StartTime и EndTime не будут установлены должным образом, вызов ArrangeOverride не будет выполнен из-за запроса бесконечного размера.