Silverlight 4: как отобразить список пользовательских элементов управления (не в порядке списка) - PullRequest
0 голосов
/ 18 августа 2010

Имеется следующий объект:

  • Пользовательский элемент управления 'FieldItem';
  • 'Поле' - ... XAML-объект, который будет содержать дюжину элементов поля;
  • FieldItemViewModel - класс данных, в котором хранятся данные, отображаемые с помощью пользовательского элемента управления «FieldItem»;
  • положение элемента управления «FieldItem» зависит от параметров объекта данных, которые привязаны к элементу управления (X и Y);
  • items - ObservableCollection - коллекция, содержащая данные.

Вопрос: какой тип объекта я должен поместить внутри, чтобы каждый элемент из моих FieldItems былотображается внутри Canvas?

Я планировал использовать ListView ... но ... не представляю, как можно изменить положение элемента представления списка ...

Любые мысли приветствуются!

Спасибо.

1 Ответ

1 голос
/ 18 августа 2010

Вы можете иметь простой ItemsControl. ItemsControl - это просто контейнер предметов. ItemsPanel должен быть установлен на ваш холст. И шаблон данных каждого элемента должен быть элементом управления «FieldItem». В вашей viewmodel выставьте свойство, которое называется Предметы, которое будет набором данных предметов. Нечто похожее на это:

<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
    <DataTemplate>
        <FieldItem  />
    </DataTemplate>
</ItemsControl.ItemTemplate>
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
        <Canvas />
    </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

Silverlight не имеет ItemContainerStyle, но вы можете установить его в коде:

   public class MyItemsControl : ItemsControl
    {
        protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
        {
            FrameworkElement contentitem = element as FrameworkElement;
            Binding leftBinding = new Binding("Position.X");
            Binding topBinding = new Binding("Position.Y");
            contentitem.SetBinding(Canvas.LeftProperty, leftBinding);
            contentitem.SetBinding(Canvas.TopProperty, topBinding);
            base.PrepareContainerForItemOverride(element, item);
        }
    }

взято отсюда: http://forums.silverlight.net/forums/p/29753/96429.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...