Фон
У меня есть набор объектов, которые я хочу привлечь холст. Каждый из них возражает, имеет свойство DateTime, которое определяет положение того объекта вдоль оси X на холсте. Каждый объект также имеет некоторые другие свойства, которые определяют изображение, которое должно быть оттянуто на холсте. Самая важная опция, которую я хочу реализовать, - то, что, поскольку время передает вторым, эти изображения, представляющие объекты, прошли бы ось X. Другими словами, правильная вертикальная граница холста всегда представляла бы текущее время (например, DateTime. Теперь), и объекты в наборе должен был бы обновить их позицию по холсту относительно той границы. Я очень плохо знаком с Silverlight, и следовательно у меня есть довольно много вопросов включая следующее. Кроме того, у меня также есть требование для следования за платформой MVVM.
Вопросы
Что я должен использовать в XAML для achive вышеупомянутого? Я думал об использовании ItemsControl с Холстом как Панель, но я не уверен, как сделать это или даже является ли это лучшим способом. Любой фактический код XAML был бы большим.
Как я должен связать набор объектов к холсту? И если так, как я перемещаю их вдоль оси X как передачи времени? Таким образом, я хотел бы, чтобы холст обновил каждый раз, когда:
Извините, если я имею, используют неправильные термины для чего-либо, поскольку я все еще плохо знаком с Silverlight.
Спасибо.
Если если вы действительно хотите использовать MVVM и привязку данных, тогда может работать ItemsControl с ItemsPanel , определенным как Canvas. Привяжите ItemsControl.ItemsSource к ObservableCollection в вашей виртуальной машине. В своем ItemTemplate для ItemsControl привяжите Canvas.X и Canvas.Y элемента пользовательского интерфейса к вашим элементам данных, используя IValueConverter между ними, чтобы выполнить сопоставление DateTime с координатами X и т. Д.
Примерно так:
<ItemsControl ItemsSource="{Binding Path=MyItemsInVM, Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas></Canvas>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Width="50" Height="50" Canvas.Left="{Binding Path=MyDateTimeProperty, Converter={StaticResource DateTimeToLeftOffsetConverter}}" Canvas.Top="100" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Другой подход заключается в использовании шаблона «Модель-Представление-Презентатор». MVVM - не единственное шоу в городе. Когда вам нужно много манипулировать пользовательским интерфейсом или работать с VSM, то Presenter может лучше подойти (хотя поведение также может играть важную роль).
Вы можете настроить таймер в презентаторе, который будет работать с интервалом обновления, а в презентаторе просто обработать событие таймера, чтобы перебирать коллекцию и отображать объекты в позиции (X, Y), напрямую обновляя элементы пользовательского интерфейса.