2010-04-27 70 views
0

由於這是這麼久,脫垂,真正犯規問一個連貫的問題:MVVM - prismv2 - INotifyPropertyChanged的

1:什麼是實現在視圖模型主要目的的子屬性的正確方法?

2:有沒有人找到一種方法來解決這個問題delegatecommand.RaiseCanExecuteChanged?還是我需要自己修復它直到MS呢?

對於故事的其餘部分...繼續。

在我的viewmodel我有一個醫生對象屬性綁定到我的Model.Doctor,這是一個EF POCO對象。我在二傳手onPropertyChanged(「醫生」)這樣:

唯一一次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 

這是從卡爾Shifflet的XAMLPowerToys控制拍攝,所以我必須假設它是正確的。但是,對於我的生活,我不能讓它工作。

,因爲我使用的是統一的容器來實例化我認爲我已經包含在這裏PRISM,它是一個單例。我通過eventaggregator向viewmodel發送更改通知,然後使用新值填充Doctor。我這樣做的原因是因爲PRISM的DelegateCommand。所以也許這是我真正的問題。

看來,存在DelegateCommand一個錯誤,不會觸發實現它,因此需要手動解僱命令RaiseCanExecuteChanged方法。我有我的onPropertyChangedEventHandler的代碼。當然,這心不是通過ICommand接口要麼,所以我必須打破,讓我的財產DelegateCommand(的X)來實現,使我有機會對每個命令的RaiseCanExecuteChanged。

回答

1

2:有沒有人找到了一種方法來解決 delegatecommand.RaiseCanExecuteChanged 問題?還是我需要自己修復它 直到MS呢?

使用Josh Smith的RelayCommand代替DelegateCommand。它修復了CanExecute問題命令沒有被提出,而像DelegateCommand不會泄露內存:

「它代表事件訂閱到CommandManager.RequerySuggested事件這確保了WPF指揮基礎設施要求所有RelayCommand對象如果只要它詢問內置命令就可以執行。「

+0

是的,我決定走這條路。哎呀,我甚至可能會爲MEF傾倒棱鏡...嘿,謝謝 – ecathell 2010-04-29 17:38:10