Рисовать или создавать UserControls с привязкой к данным динамически во время выполнения в WPF - PullRequest
1 голос
/ 31 марта 2010

Я пытаюсь создать приложение для отслеживания времени в WPF. Пользователь должен рисовать элементы, которые представляют временной интервал (timespan = bar) на холсте. Теперь существующие столбцы добавляются, когда они привязаны к коллекции данных (каждый элемент коллекции содержит ширину и левое положение столбца на холсте).

Usercontrol 'bar' имеет свойство зависимостей, называемое ProjectProperty, которое заботится о рисовании и позиционировании панели в Canvas.

Но что должно произойти, когда пользователь рисует новую панель на холсте? Это должно как-то быть привязано к базе данных, но в какой момент времени это должно произойти, и как бы я это сделал?

Я понимаю, что каждый пользовательский элемент управления 'bar' на Canvas связан с данными просто потому, что он уже существует в источнике данных.

Скажем, пользователь начинает рисовать полосу в mousedown и заканчивает мышью, нужно ли программно добавлять его левую позицию и ширину в связанный источник данных? Если нет, как еще источник данных будет обновлен?

Спасибо!

1 Ответ

0 голосов
/ 28 июня 2011

Общий подход, который я использую при привязке View к ViewModel, Model или Collection, состоит в том, чтобы поднять все изменения из Model / Collection вверх - так что представление просто слушает и отражает то, с чем оно связано. Поэтому, хотя вы отслеживаете события мыши, чтобы зафиксировать положение и размер панели (и, возможно, отрисовку предварительного просмотра при рисовании пользователем), когда пользователь завершает операцию рисования, вы должны добавить новый элемент в базовую коллекцию и пусть этот пузырь поднимется до вида.

На мой взгляд, обычным делом является то, что в коде есть только один маршрут, по которому добавляются новые элементы (непосредственно к источнику данных), и это уменьшает пути к коду и потенциальную вероятность ошибок / проблем с обслуживанием.

...