2011-06-07 74 views
7

我使用列表框自定義的ItemsSource:用自定義ItemsSource刷新ListBox的最簡單方法是什麼?

this.ListOfPersonsListBox.ItemsSource = (List<Person>)ListOfPersons.AllPersons; 

ListOfPersons是一個靜態類,因此它不能執行INotifyPropertyChanged也不IObservableCollection。

更新列表後重新繪製ListBox的最簡單方法是什麼?我目前的代碼工作,但我想找到一個清晰的解決方案:

private void SyncButton_Click(object sender, EventArgs e) 
    { 
     ListOfPersons.Sync(); 
     this.ListOfPersonsListBox.ItemsSource = null; 
     this.ListOfPersonsListBox.ItemsSource = ListOfPersons.AllPersons; 
    } 
+0

你能澄清爲什麼ListOfPersons需要成爲一個靜態類嗎?如果只是爲了方便多個頁面之間的訪問,請考慮將其作爲應用程序範圍內的屬性。然後你可以使用ObservableCollection作爲keyboardP提到的。 – 2011-06-07 15:40:49

+0

@JoshEarl請你解釋一下「應用程序範圍內的財產」是什麼意思?我是初學者,從來沒有聽說過這樣的事情...... – 2011-06-07 20:15:02

回答

8

考慮使用ObservableCollection而不是List的。它在內部實現INotifyPropertyChanged。您可以遍歷列表並將每個元素添加到新的ObservableCollection對象,並將其綁定到ListBox

如果你要經常轉換,你可以只創建一個Extension method

public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> myList) 
{ 
    var oc = new ObservableCollection<T>(); 
    foreach (var item in myList) 
     oc.Add(item); 
    return oc; 
} 
+0

你可以直接從列表中創建一個'ObservableCollection'。 'var oc = new ObservableCollection (ListOfPersons.AllPersons);' – ChrisF 2011-06-07 15:46:31

+2

@ChrisF - WP7上的Silverlight中的ObservableCollection (List )'沒有超載。自從運行SL4以後,可能會在芒果上市。 – keyboardP 2011-06-07 15:49:12

+0

啊是的 - 這是一個SL4的事情。 – ChrisF 2011-06-07 15:52:42

1

Shaeak,

Application居住類爲應用程序生命週期的持續時間。如果您需要在整個應用程序的整個生命週期中從多個頁面訪問某個內容,則一種解決方案是創建一個繼承自Application的分部類,並在此分部類上創建一個屬性。

This article有三分之二的解釋。

相關問題