2011-08-04 6 views
1

私はいくつかのテキストボックスを持つ単純なフォームを持っています。私はViewModelをコードから設定されたDataContextとして使用しています。 ViewModelにはメタデータという名前のプロパティがあります。ユーザーが新しい「メタデータ」をフォームに読み込むと、このプロパティが変更されます。メタデータプロパティが、私は( "メタデータ")OnProperyChanged実行変更されたときのViewModelにWPFネストされたデータバインディングはランダムに動作します

<TextBox Text="{Binding Path=Metadata.ContractMetadata.Utstrackning.VastligasteLongitud, Mode=TwoWay}" /> 

テキストボックスのXAMLは、このようになります。メタデータはINotifyPropertyChangedインターフェイスを実装しますが、階層内の他のクラスは継承しません。時にはそれは動作し、それ以外は動作しません。私は走ってみました:

OnProperyChanged("Metadata") 
OnProperyChanged("Metadata.ContractMetadata"); 
OnProperyChanged("Metadata.ContractMetadata.Utstrackning"); 
OnProperyChanged("Metadata.ContractMetadata.Utstrackning.VastligasteLongitud"); 

...運がありません。

+0

非常に多くのOnPropertyChangedのコードはうまく機能しました!私はちょうど私がそれを試したと仮定した...とにかく、それを行うためのより良い方法があり、それは時々どのように働くか? –

+0

私が知る限り、ChangeNotificationはバインドされたオブジェクトに対してのみ動作します。 Utstrackingは、Metadata.ContractMetadata.Utstrackning.OnPropertyChanged( "VastligasteLongitud")を呼び出すことができるように、INotifyPropertyChangedを実装する必要があります。 –

+0

問題は、バインドされたオブジェクトがサービスから取得するオブジェクトであり、その実装を混乱させたくないということです。 GUIを使ったクラス。これは、フレームワークが処理された場合には素晴らしいだろう! –

答えて

2

ネストされたプロパティのProperyChangedは、あなたのやり方では行われていません!

各ネストされたレベルのインスタンスは、プロパティ変更通知自体を生成する必要があります。

メタデータのインスタンスは、「Utstrackning」プロパティに

とUtstrackningインスタンスを上げるべきだ「VastligasteLongitud」プロパティを上げる必要がある「ContractMetadata」プロパティ

ContractMetadataインスタンスを上げる必要があります。

+0

私はあなたにソリューションを実装することはできませんでしたが、これはこれを行う良い方法であることがわかります。 –

0

NotifyPropertyChanged( "...")を試しましたか?

関連する問題