2011-03-11 69 views
3

我有一個簡單的問題,可能有一個簡單的答案。我有一個DataGrid顯示一些項目。我想更新,像這樣的項目之一:更新DataGrid的ItemsSource中的單個項目

var old = (SomeClass)grid.SelectedItem; 
var newItem = new SomeClass(...); 
old = newItem; 
//grid.Items.Refresh(); 

首先,代碼中的示例輕視,但是這是最重要的一點(真正的問題是更新通過LINQ2SQL對象,然後設置舊的對象到更新的)。

無論如何,我希望調用Items.Refresh會更新網格的用戶界面,但事實並非如此。我當然錯過了DataGrid緩存其ItemsSource元素的方式,但我想這是一個很常見的情況。任何想法?

+0

這看起來像你沒有使用屬性和MVVM。如果您當時更新該項目,則應通知UI並自行更新。 – 2011-03-11 14:32:46

+0

看看這裏https://msdn.microsoft.com/en-us/library/ms229614(v=vs.110).aspx – 2016-11-03 14:03:23

回答

2

您需要獲取網格的ItemSource並更新ItemsSource中的正確項目。現在你正在複製選定的項目並更新它,所以它什麼也不做。

我不知道確切的語法,但你要像

((IEnumerable)grid.ItemsSource)[grid.SelectedIndex] = newItem; 
+0

IEnumerable沒有定義一個索引操作符,所以這不是完整的,而是+1指出OP正在修改參考文獻的副本。 – 2011-03-11 18:01:50

+0

是的,我不確定確切的語法,並沒有編譯器打開找出 – Rachel 2011-03-11 18:33:50

1

您將需要修改的的ItemsSource的項目。即使這隻會工作,如果該項目是一個DependecyObject或實現INotifyPropertyChanged

相關問題