Привязка данных Winforms с помощью ViewModel - PullRequest
4 голосов
/ 12 февраля 2010

У меня есть список классов, которые представляют таблицы моей базы данных, например, Адрес, Клиент.

Мой GUI, как правило, представляет собой сетку данных и форму ввода данных. Это прекрасно работает для ввода данных в одну таблицу, однако теперь у меня есть форма с информацией о клиенте и их адресом.

Я думал о том, чтобы использовать ViewModel, комбинирующий класс Address и Client, и назначить его для источника привязки и привязать к нему мои элементы управления.

Как бы я связал элементы управления с именами свойств? Будет ли это работать ...

if (txtLine1.DataBindings.Count == 0)
                txtLine1.DataBindings.Add("Text", bindingSource, "Address.Line1", false, DataSourceUpdateMode.OnPropertyChanged);

Возможно ли даже использование ViewModel для привязки данных Winforms?

Ответы [ 2 ]

2 голосов
/ 15 февраля 2010

Я создал ViewModel, а затем создал источник данных в VS. Затем я перетащил свойства классов в моей модели представления в форму, и это создало необходимые мне элементы управления. Затем я вызываю метод Save для каждого класса в моей модели представления.

1 голос
/ 13 февраля 2010

Если вы используете конструктор VS, вы можете установить привязку, используя это в свойстве databinding элемента управления - пусть VS генерирует шаблонный код, если не связывает что-то в конструкторе, и проверьте сгенерированный код. Просто добавьте BindingSource в вашу форму и привяжите его к свойствам. Затем установите BindingSource.DataSource, когда у вас есть ViewModel.

Ключом к привязке к ViewModel в WinForms является реализация интерфейса INotifyPropertyChange и запуск события PropertyChanged в установщиках всех ваших свойств модели, передавая имя свойства в виде строки. Это событие перехватывается всеми элементами управления WinForms, которые будут обновляться, если вы что-либо измените в модели. Это также означает, что вы можете поймать событие на докладчике, если оно у вас есть, и выполнить какие-либо вычисления / действия там.

...