Как стать автором
Обновить

Комментарии 8

Все это очень здорово, тем более, что таких решений с Rectangle в интернете много.

А как вы решите задачу отрисовки на канве, если не знаете, какой объект будет отрисовываться? Я имею в виду рисование линий и иной фигни - которая может проявиться только в ViewModel - в зависимости от условий (тех или иных) - ну, например, сложная логика.

Будете отягощать XAML на все возможные случаи жизни? Или, может, ну его нафиг этот MVVM - пробросить в VM саму канву, да и рисовать на ней...?

Отделение VM от View было придумано для того, чтобы т.н. дизайнер ничего не знал о логике приложения - но это ведь не работает - ни разу не видел ни одной программы, чтобы там в самом XAML не было Binding к тем или иным свойствам - а это уже логика. И что? Дизайнер должен в этом ковыряться?

Для начала можно DataTemplate для каждого типа из VM. По мере усложнения можно развивать код в разные случаи.

VM от View, по моему скромному мнению, разделяется принципу ЧТО ЛОГИЧЕСКИ должно рисоваться (VM) и как оно должно быть ФИЗИЧЕСКИ ОТРИСОВАНО (View).

А вообще XAML и работа дизайнера - это длинная философская дискуссия примерно того же плана, должен ли дизайнер знать CSS и HTML в мире Веба. Вместе с JS фреймворками.

Об этом и речь - в попытке разделить зоны ответственности для программиста и дизайнера был создан монстр, в котором не то, что дизайнер, а и программист уже зачастую путается. В особенности вот эти вот DataTemplate - явно ведь совсем неочевидная вещь для дизайнера.

Посмотрите на то, как развивалась история с дизайнерами, верстальщиками и прочими программистами в вебе.

ЗЫ. Надеюсь, претензия на сложность XAML для дизайнера не ко мне.

Можно использовать DataTemplateSelector если не хватает логики разделения по типу.

В варианте WPF чуть правильнее использовать свойство ItemsControl.ItemContainerStyle, а не просто складывать стиль в ресурсы.

Одно и то же можно сделать разными способами. Да, через ItemContainerStyle будет быстрее, но если всё равно надо будет выгружать в ресурсы шаблоны данных, то держать всё одной кучей рядом вполне может быть обоснованным.

Есть свойство ItemsControl.ItemContainerStyle

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории