Так как это так долго и выпадало, и действительно не задает связного вопроса:
1: как правильно реализовать свойства объекта первичного объекта в модели представления?
2: Кто-нибудь нашел способ исправить проблему Delegatecommand.RaiseCanExecuteChanged? или мне нужно исправить это самостоятельно, пока MS не сделает?
Для остальной части истории ... продолжить.
В моей модели представления у меня есть свойство объекта doctor, связанное с моим Model.Doctor, который является объектом EF POCO. У меня есть onPropertyChanged ("Доктор") в установщике как таковой:
Private Property Doctor() As Model.Doctor
Get
Return _objDoctor
End Get
Set(ByVal Value As Model.Doctor)
_objDoctor = Value
OnPropertyChanged("Doctor")
End Set
End Property
Единственный раз, когда OnPropertyChanged срабатывает, если изменяется ВСЕ объект. Это не будет проблемой, за исключением того, что мне нужно знать, когда меняются свойства доктора, чтобы я мог включить другие элементы управления в моей форме (например, кнопку «Сохранить»). Я попытался реализовать это следующим образом:
Public Property FirstName() As String
Get
Return _objDoctor.FirstName
End Get
Set(ByVal Value As String)
_objDoctor.FirstName = Value
OnPropertyChanged("Doctor")
End Set
End Property
это взято из элементов управления XAMLPowerToys из Karl Shifflet, поэтому я должен предположить, что это правильно. Но я не могу заставить его работать.
Я включил сюда PRISM, потому что я использую контейнер для единства, чтобы создать экземпляр моего представления, и он ЕДИНИЧНЫЙ. Я получаю уведомление об изменении модели представления через eventaggregator, который затем заполняет Doctor новым значением. Причина, по которой я делаю все это, из-за DelegateCommand PRISM. Так что, возможно, это моя настоящая проблема.
Похоже, что существует ошибка в DelegateCommand, которая не запускает метод RaiseCanExecuteChanged для команд, которые его реализуют, и, следовательно, необходимо запускать вручную. У меня есть код для этого в моем onPropertyChangedEventHandler. Конечно, это также не реализовано через интерфейс ICommand, поэтому мне нужно сломать и сделать мои свойства DelegateCommand (из X) так, чтобы у меня был доступ к RaiseCanExecuteChanged каждой команды.