Если вы привязываете непосредственно к самой 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), чтобы удовлетворить ваши потребности.