2012-05-06 12 views
3

私はを使用していますが、PriceListPrimeはInotifyを実装しています。Observable Collectionはデータグリッドを更新していません

という名前のデータグリッドにはAll_PriceListがバインドされましたが、GetallがDBからデータを読み込んで取得するとき、データグリッドは更新されません。

それは私がそれをこのようにハックする場合にのみ更新されます:私が間違っているか、私が実装すべきかどこ

DataGrid1.ItemsSource = Nothing 
DataGrid1.ItemsSource = All_PriceLists 

あなたは私に教えてもらえます。ありがとうございました。

答えて

4

あなたはあなたの問題

  • アップデート直接のItemsSourceにいくつかのソリューションを持っている

    DataGrid1.ItemsSource = new ObservableCollection(Of PriceListPrime)(GetAll()) 
    
  • 更新(別の回答で述べたように)のObservableCollection

    (代わりにローカルメンバ変数を置き換えます)
    All_PriceList.Clear(); 
    For Each item in Getall() 
        All_PriceList.Add(item) 
    Next 
    
  • ビューモデルにaContextとビューモデル

    Dim vm as new MyViewModel() 
    DataContext = vm 
    vm.Items = new ObservableCollection(Of PriceListPrime)(GetAll())   
    

    のプロパティにバインドビューモデルはINotifyPropertyChangedのを実装し、Itemsプロパティが変更されたときにPropertyChangedイベントを引き上げます。 Xamlでは、DataGridのItemsSourceItemsプロパティにバインドされます。

+0

All_PriceListsの代わりにMyViewModelを完全に使用すると、バインディング作業が可能になります。これにより、(Tの)タイプの以前のoneisのためにctypeを使用してクエリを使用できるようになります。それ?そして、あなたはそれについてのより多くの情報を提供できる情報源に私を指摘してください。 – surpavan

+0

どのビットで詳細情報が必要ですか?私はMVVMとDataContextの使用を推測しています。 SOで検索すると、たくさんのリソースがあります。 – Phil

+0

これはMVVMのためのものです。ありがとう、私はそれにもっと時間を費やそうとします。 – surpavan

2

問題は、コレクションを更新するのではなく、置き換えていることです。これは異なるものです。 データグリッドは古いリストにバインドされたままであり、更新されたデータは新しい非バインドコレクションに格納されます。だから、あなたは解決策をハッキングしていない、あなたは正しい新しいコレクションにデータグリッドをバインドしています。

より自動化されたソリューションが必要な場合は、データグリッドを完全に異なるコードであるデータセット/データテーブルにバインドする必要があります。

+0

どのようにObservableCollectionのプロパティまたはメソッドがありますか? – surpavan

+0

あなたは「目に見えない」によって示唆されたことをすることができますが、あなたの現在の解決策はより簡単で速くなります。 –

2

変更に応じてアプリが反応するようにするには、新しいObservableCollectionを作成するのではなく、ObservableCollectionを更新する必要があります。

したがって、All_PriceListコレクションをクリアし、新しいアイテムを追加してください。例:

All_PriceList.Clear(); 
For Each item in Getall() 
    All_PriceList.Add(item) 
Next 

あなたがアイテムを一つずつ追加したり、独自のコレクションでINotifyCollectionChangedを実装する必要がありますのでのObservableCollectionは、AddRangeをサポートしていません。

関連する問題