Как связать Холст с набором объектов в Silverlight

Фон

У меня есть набор объектов, которые я хочу привлечь холст. Каждый из них возражает, имеет свойство DateTime, которое определяет положение того объекта вдоль оси X на холсте. Каждый объект также имеет некоторые другие свойства, которые определяют изображение, которое должно быть оттянуто на холсте. Самая важная опция, которую я хочу реализовать, - то, что, поскольку время передает вторым, эти изображения, представляющие объекты, прошли бы ось X. Другими словами, правильная вертикальная граница холста всегда представляла бы текущее время (например, DateTime. Теперь), и объекты в наборе должен был бы обновить их позицию по холсту относительно той границы. Я очень плохо знаком с Silverlight, и следовательно у меня есть довольно много вопросов включая следующее. Кроме того, у меня также есть требование для следования за платформой MVVM.

Вопросы

Что я должен использовать в XAML для achive вышеупомянутого? Я думал об использовании ItemsControl с Холстом как Панель, но я не уверен, как сделать это или даже является ли это лучшим способом. Любой фактический код XAML был бы большим.

Как я должен связать набор объектов к холсту? И если так, как я перемещаю их вдоль оси X как передачи времени? Таким образом, я хотел бы, чтобы холст обновил каждый раз, когда:

  • существуют объекты, добавленные к набору; или
  • объекты удалены из набора; или
  • существующее изменение объекта (например, некоторое измененное свойство и следовательно должен изменить изображение, которое показывают на холсте) в наборе; или
  • даже если не будет никаких изменений в наборе, как упомянуто выше, то эти объекты должны будут перемещаться каждую секунду.

Извините, если я имею, используют неправильные термины для чего-либо, поскольку я все еще плохо знаком с Silverlight.

Спасибо.

5
задан mr.joe 5 April 2010 в 13:17
поделиться

1 ответ

Если если вы действительно хотите использовать 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), напрямую обновляя элементы пользовательского интерфейса.

2
ответ дан 14 December 2019 в 19:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: