По правде говоря, я не видел, чтобы это было так плохо, и думаю, что это очень работоспособное решение.
Возьмем этот простой объект модели данных:
Public Class SimpleItemViewModel
Implements INotifyPropertyChanged
Private _item As String
Public Property Item As String
Get
return _item
End Get
Set (value as string)
_item = value : OnPropertyChanged("Item")
End Set
End Property
Protected Overridable Sub OnPropertyChanged(propChange as string)
Raise Event PropertChanged(me, new PropertyChangedEventArgs(propChange))
End Sub
Public Event PropertyChanged(sender as object, e as PropertyChangedEventArgs)
End Class
Это легко связать с простым Textbox через:
<Textbox Text="{Binding Item}" />
Кроме того, если я хочу иметь флаг DIRTY, я могу легко поместить установленный флаг в подпрограмму OnPropertyChanged и легко определить, нужно ли мне сохранять какие-либо изменения пользователя или нет.
Мне показалось, что проще всего иметь набор классов, которые располагаются между уровнем доступа к данным и пользовательским интерфейсом, в котором хранится этот материал. Вы даже можете заставить свою Business Logic и DAL передавать эти классы, а не атомарные значения.