2011-02-09 31 views
0

私はPrism v4とMVVMを使用しています。私は持っている私のviewmodelで :私のページでWPF MVVM ListViewは更新されません!

private TB_COMPANY tb; 
    public TB_COMPANY Tb { 
     get { 
      return this.tb; 
     } 

     private set { 
      if (this.tb != value) { 
       this.tb = value; 
       this.RaisePropertyChanged(() => this.Tb); 
      } 
     } 
    } 

を、私は(!私もリストビューで試みたが、動作しない)データグリッドを持っています。

<DataGrid ItemsSource="{Binding Tb.TB_ADDRESS.RL_ADDRESS_PHONE}" .../> 

RL_ADDRESS_PHONEは、携帯電話のリストです。

private void MyCommand() 
{ 
    ... 
    Tb.TB_ADDRESS.RL_ADDRESS_PHONE.Add(
     new RL_ADDRESS_PHONE 
     { 
      TB_PHONE = new TB_PHONE 
         { 
          NU_PHONE = _txtTelefone, 
          ST_TYPE = _txtTipoTelefone 
         } 
     }); 
    ... 
} 

しかし、何がUIに起こりません... しかし、デバッグ、リットル中:私は、リストに電話を追加し、いくつかの瞬間に、そう ...会社のist is fullfiled .... UIを更新するにはどうすればよいですか?

+10

大変なことです... OVER_YOUR_MODEL_CLASS_AND_PROPERTY_NAMESはあなたがコントロールできないことを願っています。誰でも、フレームワークガイドラインのコピーを貼ってください。 – Will

+0

私はそれを取得できませんか?どういう意味ですか? – renanlf

+2

@Renalf:RL_ADDRESS_PHONEプロパティの定義とRaisePropertyChangedメソッドの内容を確認する必要があります。また、なぜなら、ALL_CAPS_PROPERTIESは一般に、コードを読みにくくすると考えられるということです。マイクロソフトによって出版されたフレームワーク開発ガイドライン文書には、ベストプラクティスがあり、これが言及されています。 –

答えて

4

プロパティは、TB_ADDRESSの場合には、INotifyPropertyChangedも実装する必要があります。 Listの場合は、実現しようとしている動作に必要なINotifyCollectionChangedを実装するObservableCollectionを使用する必要があります。

また、C#言語のデザインガイドラインと命名規則を調べるには、msdnで見つけることができます(.net 1.1と言いますが、次のバージョンの枠組み)。

+0

ああ、忘れてしまった、私のリストはすべてObservableCollections ... – renanlf

2

バインディングは機能しますか?出力ウィンドウを確認しましたか?バインディングパスのすべてのプロパティは公開されていますか?より多くのコードが必要です。

すべてのプロパティ通知を脇に:ObservableCollectionが見つかった場合、オブジェクトを追加するとに更新されます。だから私は、パスのどこかにフィールドまたは非公開のプロパティを使用している可能性があります。

これが当てはまらない場合は、適切なPropertyChanged通知がない限り、ObservableCollectionへの参照を上書きしないように注意してください。 (バインディング・パスの各クラスには、そのインタフェース(INotifyPropertyChanged)を実装する必要があります。これは、ビューに通知されないすべての上書き参照で更新が中断されるためです。

+0

ええ、それはすべてpublicだ... – renanlf

+0

オブジェクトTB_COMPANYはWCFサービスから来て、Entity FrameworkからのPOCOです。 すべてのコレクションをObservableCollectionとして配置するようにサービスを設定しました – renanlf

+0

はい、すべてのバインディングが機能します...私のTbプロパティには他の多くのバインディングがあり、そのすべてが機能しています... renanlf

0

あなたはWCFサービスの使用について言及しました。あなたの観測可能なコレクションがUIスレッドとは別のスレッドで作成されている可能性はありますか?この場合、UIはバインドできません。 Bea Stollnitzさんは彼女のブログにあるスレッド間のバインドに関する問題について、ここでは - >http://bea.stollnitz.com/blog/?p=34について議論します。

UIスレッドにobservableコレクションの作成を呼び出すことで、それを得ることができるはずです。

+0

ありがとう...しかし、それは事実ではない= / – renanlf

関連する問題