JoeSmith3100
@JoeSmith3100
Начинающий программист C#

Какой тип данных лучше использовать для привязки к Canvas в WPF?

Допустим есть файл XAML со свёрстанным интерфейсом, в котором есть элемент типа Canvas, и который надо привязать к одной из переменной из ViewModel.

Какой тип данных для переменной из VM лучше использовать?
  • Вопрос задан
  • 45 просмотров
Решения вопроса 1
VoidVolker
@VoidVolker Куратор тега C#
Dark side eye. А у нас печеньки! А у вас?
как например из List там отобразить произвольное количество отрезков (именно со стороны XAML, впринципе если просто взять XY координаты точек и построить по ним линии со стороны VM то это без проблем, а вот как "заставить" эти линии отобразиться непосредственно на канвасе уже со стороны view - пока для меня не совсем понятно)


В вашем случае все просто: входящие данные, в XAML инпуты привязываются к VM и далее к модели, а исходящие данные через модель передаются в VM и оттуда уже идет привязка к нужному контролу. В модели, при поступлении данных либо вызывается метод для вычисления точек графика либо вычисление делается по команде из VM отдельным методом. Точки графика сохраняются в ObservableCollection, которая привязывается в XAML стандартным методом. Как именно данные из VM попадают на канвас - завит от вашей реализации графика. Правильный подход будет следующим:
Resources
    MyChart.xaml -> xaml разметка графика (контейнер с канвасом, легендой и прочее)
Views 
    MyChart.cs -> public class MyChart : Control // view - низкоуровневая логика самого контролла
    MyChartCanvas.cs -> public class MyChart : Canvas // Тут реализуются методы рендеринга данных
VM
    MyChartVM.cs -> тут высокоуровневая логика работы графика, переменные и прочее
Models
    MyChartModel.cs -> тут логика расчета данных для графика


И вот это все связывается вместе через события и свойства. Если логика графика простая - то её можно оставить во View, но лучше, конечно, все же вынести в отдельный View просто унаследовав от канваса.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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