Комментарии 8
Все это очень здорово, тем более, что таких решений с Rectangle в интернете много.
А как вы решите задачу отрисовки на канве, если не знаете, какой объект будет отрисовываться? Я имею в виду рисование линий и иной фигни - которая может проявиться только в ViewModel - в зависимости от условий (тех или иных) - ну, например, сложная логика.
Будете отягощать XAML на все возможные случаи жизни? Или, может, ну его нафиг этот MVVM - пробросить в VM саму канву, да и рисовать на ней...?
Отделение VM от View было придумано для того, чтобы т.н. дизайнер ничего не знал о логике приложения - но это ведь не работает - ни разу не видел ни одной программы, чтобы там в самом XAML не было Binding к тем или иным свойствам - а это уже логика. И что? Дизайнер должен в этом ковыряться?
Для начала можно DataTemplate для каждого типа из VM. По мере усложнения можно развивать код в разные случаи.
VM от View, по моему скромному мнению, разделяется принципу ЧТО ЛОГИЧЕСКИ должно рисоваться (VM) и как оно должно быть ФИЗИЧЕСКИ ОТРИСОВАНО (View).
А вообще XAML и работа дизайнера - это длинная философская дискуссия примерно того же плана, должен ли дизайнер знать CSS и HTML в мире Веба. Вместе с JS фреймворками.
Об этом и речь - в попытке разделить зоны ответственности для программиста и дизайнера был создан монстр, в котором не то, что дизайнер, а и программист уже зачастую путается. В особенности вот эти вот DataTemplate - явно ведь совсем неочевидная вещь для дизайнера.
Можно использовать DataTemplateSelector если не хватает логики разделения по типу.
В варианте WPF чуть правильнее использовать свойство ItemsControl.ItemContainerStyle, а не просто складывать стиль в ресурсы.
Есть свойство ItemsControl.ItemContainerStyle
Как подружить Canvas и ItemsSource в WPF и AvaloniaUI