Динамическая сетка Xaml с моделями представления - PullRequest
0 голосов
/ 22 января 2011

Здравствуйте, я пытаюсь создать сетку в xmal, которая заполняется через ViewModel.Сетка 5x5, и моя ViewModel содержит список «MyObject».Этот объект содержит 2 переменных типа Row и Column, которые указывают, где в сетке должен находиться объект.MyObject также является представлением моделей, и пространство сетки должно быть заполнено именами шаблонов данных MyTemplate с MyObject в качестве DataContext.Теперь я довольно новичок в xaml и смотрю модели, но как лучше всего это сделать?

1 Ответ

1 голос
/ 22 января 2011

Давайте посмотрим ...
Поместите ObservableCollection в виртуальную машину, затем ...

Опция 1:
... простая Сетка в V. Подписатьсяк его событию CollectionChanged из xaml.cs, добавьте ContentControls для каждого добавленного объекта в сетку, свяжите свойства ContentControl Grid.Row и Grid.Column со свойствами каждого объекта и установите DataContext для самого объекта, а ContentTemplate для Resources ["MyTemplate"].(Кроме того, для всех удаленных объектов найдите соответствующий ContentControl и удалите его.)
Pro: easy
Con: .cs, без поддержки дизайнера

Опция 2:
... ItemsControl в V. Установите его ItemPanelTemplate в Grid и привяжите вашу ObservableCollection к его ItemsSource.Затем установите ваш Itemtemplate на MyTemplate.Теперь уловка состоит в том, чтобы поместить элементы в правильную ячейку, основываясь на ваших значениях.Для этого используйте свойство ItemControl ItemContainerStyle и свяжите Grid.Row и Column контейнера с этими свойствами.
Pro: хороший xaml и легко расширяемый
Con: ItemContainerStyle сложен в WPF и отсутствует в Silverlight, так что в случаео последнем вы можете забыть

Вариант 3:
... настраиваемая панель, которую вы пишете.Унаследовать это от Grid возможно.Затем, если в него вставлен элемент, проверьте, реализует ли его DataContext интерфейс, содержащий ваши свойства.Затем используйте это как ItemsPanel в Варианте 2 ...
Pro: он должен отлично работать
Con: Вы должны написать новую Panel для этого ...

Надеюсь, один из этих 3 будетбудет хорошо для тебя.

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