Wpf mvvm-prismv2-INotifyProperty已更改

Wpf mvvm-prismv2-INotifyProperty已更改,wpf,mvvm,prism-2,Wpf,Mvvm,Prism 2,因为这是一个很长很长的问题,没有提出一个连贯的问题: 1:在viewmodel中实现主对象子属性的正确方法是什么 2:是否有人找到了修复delegatecommand.RaiseCanceTechChanged问题的方法?还是我需要自己修好直到MS修好 接下来的故事…继续 在我的viewmodel中,我有一个绑定到Model.doctor的doctor对象属性,它是一个EF POCO对象。我已在setter中更改了以下内容(“医生”): Private Property Docto

因为这是一个很长很长的问题,没有提出一个连贯的问题:

1:在viewmodel中实现主对象子属性的正确方法是什么

2:是否有人找到了修复delegatecommand.RaiseCanceTechChanged问题的方法?还是我需要自己修好直到MS修好

接下来的故事…继续

在我的viewmodel中,我有一个绑定到Model.doctor的doctor对象属性,它是一个EF POCO对象。我已在setter中更改了以下内容(“医生”):

       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
这是从Karl Shifflet的XAMLPowerToys控件中获取的,因此我必须假设它是正确的。但就我的一生而言,我无法让它发挥作用

我在这里包含了PRISM,因为我使用unity容器来实例化我的视图,它是一个单例。我通过eventaggregator向viewmodel发送更改通知,然后用新值填充Doctor。我之所以这么做是因为PRISM的DelegateCommand。所以这可能是我真正的问题

DelegateCommand中似乎存在一个bug,该bug不会对实现它的命令触发RaiseCanecuteChanged方法,因此需要手动触发。我的onPropertyChangedEventHandler中有这方面的代码。当然,这也不是通过ICommand接口实现的,因此我必须中断并使我的properties DelegateCommand(Of X)生效,以便可以访问每个命令的RaiseCanceCextechange

2:有人找到办法解决这个问题了吗 delegatecommand.RaiseCanExecuteChanged 问题还是我需要自己修理 直到MS这样做

使用Josh Smith而不是DelegateCommand。它修复了未引发CanExecute命令的问题,并且不像DelegateCommand那样泄漏内存:


“它将事件订阅委托给CommandManager.RequerySuggested事件。这可确保WPF指挥基础结构在询问内置命令时询问所有RelayCommand对象是否可以执行。”

关于2:Microsoft没有要修复的错误,因为它是设计的,所以您必须明确地告诉命令重新评估它自己。当然,你可能不同意他们的决定


如果您想让DelegateCommands在RaiseCanecuteChanged被激发时重新计算,请参见

yep,我决定这样做。见鬼,我甚至可能为了我把prism都甩了…呵呵,谢谢