Привязка данных к форме не работает - PullRequest
0 голосов
/ 19 марта 2010

У меня есть форма, в которой есть 4 метки, и эти значения меток отображаются в 4 текстовых полях, я использую MVVM и связываю эти текстовые поля с таблицей данных, которая поступает через набор типизированных данных, не проблема здесь, когда я добавляю Новая строка в таблице данных со значениями по умолчанию для столбцов и обновлением пользовательского интерфейса путем вызова события onpropertychanged из моей модели представления, эти значения не отражаются в форме.

Перед добавлением новой строки в таблицу я удаляю все предыдущие строки, а затем добавляю.

ТИА.

Саурабй

1 Ответ

3 голосов
/ 19 марта 2010

Если вы привязываете непосредственно к самой DataTable в любом используемом вами ItemsControl, тогда rasing PropertyChanged на вашей ViewModel, вероятно, не распознается как изменение связанной сущности.По сути, DataTable и дочерние сущности не поддерживают INotifyPropertyChanged и INotifyCollectionChanged, поэтому они не действуют так, как хотелось бы для привязки данных.

Чтобы «ударить молотком» васможно попробовать Rasing PropertyChanged с параметром String.Empty, что означает «перепривязать все», но это может быть довольно дорого, в зависимости от страницы.

Некоторые лучшие варианты:

Вы можете попробовать реализовать INotifyCollectionChanged в типизированных типах DataTable, но это может быть довольно сложно в зависимости от сложности вашей схемы.

A "«более рекомендуемый» подход заключается в том, чтобы взглянуть на что-то вроде Entity Framework для выполнения своей работы в ORM.Затем вы можете получить обратно реальные сущности, которые могли бы правильно реализовать INotifyPropertyChanged.

Другой приемлемый подход - использовать что-то вроде AutoMapper для преобразования строк таблицы данных в реальные сущности ViewModel и ObservableCollection<> s.Вам, конечно, нужно сопоставить их с вашими объектами хранения данных (будь то строки данных или что-то еще) в конце дня, но есть много инструментов, чтобы сделать это проще.

В общем,не многие люди рекомендуют использовать DataTables (строго типизированные или нет) для перемещения данных внутри вашего приложения.Слишком много полезных инструментов (например, Validation, ORM, Data Binding) требуют наличия реального объекта, на котором вы можете реализовать свои собственные интерфейсы (например, INotifyPropertyChanged).Если вы работаете с относительно «зеленым полем», я бы потратил немного времени на Entity Framework или LINQ-to-SQL (что, по-видимому, не рекомендуется в пользу EF) и посмотрел бы, можете ли вы использовать один из них (илидругой ORM, например, NHibernate), чтобы удовлетворить ваши потребности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...