2011-01-18 9 views
0

私はSilverlight ChildWindowを持っています。リンクをクリックすると、この子ウィンドウが開き、ViewModelのデータが表示されます。問題は、ViewModelのデータが更新されたときに更新されないということです。Silverlightオブジェクトのプロパティへのデータバインド

ポップアップからのサンプル:

<TextBox Text="{Binding Path=AgentExceptionDetail.Action, Mode=TwoWay}" /> 

ビューモデル:

private AgentExceptionDetail _agentExceptionDetail; 
public AgentExceptionDetail AgentExceptionDetail 
{ 
    get { return _agentExceptionDetail; } 
    set 
    { 
    if (value != _agentExceptionDetail) 
    { 
     RaisePropertyChanged("AgentExceptionDetail"); 
     _agentExceptionDetail = value; 
    } 
    } 
} 

このAgentExceptionDetailオブジェクトは、RIA、サービスへの呼び出しを介して取り込まれます。この呼び出しは成功し、データは正常に戻されます。 OneWayではなくMode = OneTimeのように実際に動作しています。ポップアップを閉じて再び開くと、データが表示されますが、ポップアップが初めて呼び出されたときにAgentExceptionDetail = nullが返されるためです。

バインディングが実際に "AgentExceptionDetail.Action"を探しているときに、これは私に "AgentExceptionDetail"のプロパティ変更イベントを発生させることと関係がありますか?もしそうなら、これには道がありますか?

+0

もう少し詳細が必要ですが、何を更新していますか? AgentExceptionDetailまたはそのActionプロパティActionプロパティはどのように見えますか? ...概念的には、あなたがやっていることが正しいように見えます! – ColinE

答えて

2

私はあなたの記述を正しく理解している限り、あなたのシナリオで必要に応じて動作するはずです。ただし、ここで重大な問題が発生しています。

if (value != _agentExceptionDetail) 
    { 
     RaisePropertyChanged("AgentExceptionDetail"); 
     _agentExceptionDetail = value; 
    } 

実際に変更する前に、変更通知を送信しています。操作の順序を逆にして、このエラーを修正してください。

if (value != _agentExceptionDetail) 
    { 
     _agentExceptionDetail = value; 
     RaisePropertyChanged("AgentExceptionDetail"); 
    } 
+0

私は頭が恥ずかしそうにぶら下がっています...あなたが正しいです、私は何かを変更する前にイベントを起こしていました。スクールボーイのエラー!ありがとうございました。私はあまりにもそれを見て、私が明らかに見逃していた。 – Fermin

関連する問題