0

これは非常に長く脱出しており、実際には首尾一貫した質問をしないため、次のようになります。

1:ビューモデルにプライマリオブジェクトのサブプロパティを実装する適切な方法は何ですか?

2:delegatecommand.RaiseCanExecuteChangedの問題を修正する方法を見つけた人はいますか?または、MSが修正するまで自分で修正する必要がありますか?

話の残りの間...続けてください。

私のviewmodelには、EFPOCOオブジェクトであるModel.Doctorに関連付けられたdoctorオブジェクトプロパティがあります。セッターにonPropertyChanged( "Doctor")があります。

       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

WHOLEオブジェクトが変更された場合にのみ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

これはKarlShiffletのXAMLPowerToysコントロールから取得されているため、正しいと想定する必要があります。しかし、私の人生のために、私はそれを機能させることができません。

ビューをインスタンス化するためにユニティコンテナを使用しており、シングルトンであるため、ここにPRISMを含めました。eventaggregatorを介してビューモデルへの変更通知を受け取ります。eventaggregatorはDoctorに新しい値を入力します。私がこれをすべて行っている理由は、PRISMのDelegateCommandのためです。だから多分それは私の本当の問題です。

DelegateCommandには、それを実装するコマンドでRaiseCanExecuteChangedメソッドを起動しないバグがあるため、手動で起動する必要があるようです。そのためのコードがonPropertyChangedEventHandlerにあります。もちろん、これはICommandインターフェイスを介して実装されていないため、各コマンドのRaiseCanExecuteChangedにアクセスできるように、プロパティをDelegateCommand(Xの)にする必要があります。

4

2 に答える 2

1

2:delegatecommand.RaiseCanExecuteChangedの問題を修正する方法を見つけた人はいますか?または、MSが修正するまで自分で修正する必要がありますか?

DelegateCommandの代わりにJoshSmithのRelayCommandを使用してください。CanExecuteコマンドが発生しない問題を修正し、DelegateCommandのようにメモリをリークしません。

「イベントサブスクリプションをCommandManager.RequerySuggestedイベントに委任します。これにより、WPFコマンドインフラストラクチャは、組み込みコマンドを要求するたびに実行できるかどうかをすべてのRelayCommandオブジェクトに要求します。」

于 2010-04-29T10:23:12.243 に答える
0

約2:Microsoftが修正するバグはありません。これは、コマンドにそれ自体を再評価するように明示的に指示する必要があるためです。もちろん、あなたは彼らの決定に同意しないかもしれません。

RaiseCanExecuteChangedが起動されるたびに、DelegateCommandsを再評価する場合は、http://compositewpf.codeplex.com/Thread/View.aspx?ThreadId=47338を参照してください。

于 2010-04-29T10:32:18.643 に答える