我有ListBox
和ObservableCollection<HostEntry>
。 HostEntry
執行INotifyPropertyChanged
。目前,我以這種方式綁定他們:如何讓列表框自動刷新使用項目的ToString方法的條目?
lstHosts.DataContext = _hosts;
lstHosts.DisplayMemberPath = "HostName";
這很好。當我編輯其中一個HostEntries的名稱時,ListBox會自動刷新,顯示新名稱。
不過,我寧願它顯示HostEntry.ToString()
因爲它在默認情況下(不設置DiplayMemberPath
,但如果我這樣做,列表不會得到刷新。我相信這是因爲HostName
屬性觸發一個PropertyChanged
事件,但沒有什麼信號通知ToString()
已經改變
有可能我的東西可以添加到這個方法:?
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
要通知ListBox
它應該刷新此項目
我不喜歡明確調用ListBox.Items.Refresh()
的想法...如果我錯過了一個案例,或者有什麼有多個這個列表的視圖?它也不應該被烘焙到集合中,因爲如果我想使用HostEntry
的不同集合呢?應該是在HostEntry
課堂內某處做的一種方法,不是嗎?
編輯:我想用ToString()
因爲我不只是想顯示HostName
財產。我想用一些其他的屬性做一些字符串格式化,我可以在ToString()
中輕鬆做到。
我可以問你爲什麼不想使用一個屬性?不設置DisplayMemberPath屬性有什麼好處? – Mark 2011-05-01 02:36:36
@ Mark2:因爲我不想顯示一個簡單的屬性,我想顯示一組屬性。我需要它來調用一個函數,以便我可以合併它們。 – mpen 2011-05-01 16:15:27