2013-01-23 24 views
5

treeviewitemをクリックするたびにdatagridをフラッシュする必要があります。私のコードは以下の通りです。wpfのデータグリッド値をクリア

private void treeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
{ 
    this.dataGrid1.Columns.Clear(); 
    this.dataGrid1.ItemsSource= null; 
    String path =this.treeView1.SelectedItem; 
    if (!File.Exists(path)) 
     MessageBox.Show("Not Found"); 
    else 
    { 
     ob.provider(path); 

     // String data = @"C:\logs.xml"; 
     string data = path; 
     objref.functionality(data); 
     this.dataGrid1.ItemsSource = objref.Result; 
    } 
} 

しかし、私がtreeviewアイテムをクリックするたびに、データグリッドはクリアされません - それは入ってくるデータと共に追加されます。 私は両方を使用しましたdataGrid1.Columns.Clear()dataGrid.ItemSource= null; どうすればいいですか?

答えて

18

あなたが使用してデータグリッドを移入している場合:

dataGrid.Items.Add(someObject); 

を次にあなたが使用することができるはず:

dataGrid.Items.Clear(); 

をすべての行を削除するには。

あなたのようなのItemsSourceにバインドする場合:

dataGrid.ItemsSource = someCollection; 

その後、あなたはnullに、それはすべての行を削除しますのItemsSourceを設定することができるはずです。

EDIT:

はそれを更新することを忘れないでください:

dataGrid.Items.Refresh(); 
+0

はのItemsSourceに移入しています。私はすでにnullに設定しました。それが私の質問でした。しかし、私のデータグリッドはまだクリアされていません.. – BinaryMee

+0

それはあなたがそれを入力している唯一の場所ですか? – Rhexis

+1

それをリフレッシュしてみてください:dataGrid.Items.Refresh(); – Rhexis

0

私は、関数が呼び出されたときに毎回追加される公共のIEnumerableコレクションを持っていました。だから上書きすることで、データグリッド内のデータをフラッシュしました..

1

IEnumerable<>ではなくObservableCollection<>クラスを使用することを検討してもよいでしょう。

ObservableCollection<User> users = new ObservableCollection<User>(); 
dataGrid1.ItemsSource = users; 

以下のコードを使用してデータグリッドをクリアすることができます。

users.Clear(); 
1

私はいくつかのアプローチを試してみましたが、これはこれまでで最高の1と最も信頼性の高いされた:

dataGrid.Columns.Clear(); 
dataGrid.Items.Clear(); 
dataGrid.Items.Refresh(); 
関連する問題