2012-01-10 6 views
0

私はMVVMパターンを使用しています。 DataGridのリフレッシュメソッドを使用したいと思います。 私はまた、次のリンクとその便利通過した: How to refresh a WPF DataGrid?viewmodelのDatagrid.Items.Refresh()を使用

が、私の問題がある:私はこのようなのviewmodelに1つのDataGridオブジェクトを作成しました:

public DataGrid ActiveGrid=new DataGrid(); 
public void RefreshGrid() 
     { 
      View.Dispatcher.Invoke((Action)(() => 
       ActiveGrid.Items.Refresh() 

       )); 
     } 

と私のDataGridのitemsourceがすでに別にバインドされていますコレクション例:

<DataGrid x:Name="ActiveGrid" 
         IsReadOnly="True"      
         ItemsSource="{Binding ActiveCallCollection}" 
         SelectedItem="{Binding ActiveGridCollection, 
              Mode=TwoWay}" SelectionMode="Single" 
         Visibility="{Binding IsActiveCallsSelected, 
              Converter={StaticResource BooleanToVisibilityConverter}}" 
         d:LayoutOverrides="Height"> 

xamlデータグリッドにActiveGridをバインドする方法を教えてください。

+3

に更新されないことが、私はわからないんだけどあなたのビューモデル。 ActiveCallCollectionに項目を追加したためにDataGridを更新したい場合は、INotifyPropertyChangedを使用して、そのコレクションで何かが変更されたことをUIに伝える必要があります。実際にコレクションをデータバインディングしてアイテムを動的に追加する場合は、ObservableCollectionを使用することをお勧めします。このコレクションにアイテムを追加すると、新しいアイテムを取得したことが既に通知されます。 –

+0

私のActiveCallCollectionは実際にObservableCollectionです。私もINotifyPropertyChangedを試してみました。 DataGridはローを切り替えると更新され、ObservableCollectionにデータが来るとすぐには機能しません。または、xamlウィンドウで直接refresh()メソッドを使用できますか?どのように? – deathrace

+0

あなたの質問に答えるには "どうすればActiveGridをxaml DataGridにバインドできますか?" xamlからDataGridを削除してContentPresenterにし、ActiveGridをpublicプロパティにすることができます。 ''しかし、ここでは正しいオプションではないと思います。コンストラクタ**の後に新しいobservableコレクション**を作成した場合は、コレクションをNotifyPropertyChangedする必要があります。 –

答えて

0

ViewModelにDataGridオブジェクトがあり、MVVMではない場合は、あなたが達成したいことをよく尋ねるので、私たちはあなたを助けることができます。

OberservableCollectionにバインドする場合は、これをに変更してください。!すべての変更(追加、削除)がDataGridに反映されます。

plsはあなたが作成/どこがMVVMデザインパターンを使用している場合は、あなたのビューモデルが代わりにDataGridの

を持つべきではありませんあなたのViewDataGridを持っている必要があり、それが必要あなたのコレクション

+0

実際にあなたは正しいです。私がActiveGrid.Items.Refresh()を呼び出すことができる場所から教えてください。 * .xaml.csから呼び出されたくないからです。あなたがmvvmを行い、observablecollectionへのバインディングを行う場合、リフレッシュを呼び出す必要はありませんでしたが、 – deathrace

+1

がうまくいけば、さらにコードを投稿できます。あなたの商品は自動的に更新されます。グリッドを更新しないコードの行を投稿する必要があります。 – blindmeis

+0

あなたのビューモデルのコードラインはもちろん:)私たちは解決策を見つけることができるかもしれません – blindmeis

0

を変え、あなたのコードを投稿ViewModel内のObservableCollectionにバインドしてください。

あなたはItemsSourceプロパティをバインドしていない必ずはにそれを設定するか、またはあなたがこの中に作成している理由ObservableCollectionへの変更は自動的にUI

<DataGrid x:Name="ActiveGrid" 
      IsReadOnly="True"      
      ItemsSource="{Binding ActiveCallCollection}" 
      SelectedItem="{Binding Selected ActiveCall}" 
      SelectionMode="Single" 
      Visibility="{Binding IsActiveCallsSelected, 
           Converter={StaticResource BooleanToVisibilityConverter}}" 
      d:LayoutOverrides="Height"> 
関連する問題