我有一個列表框:WPF/C#更新屬性更改到ListBox
<ListBox x:Name="lbxAF" temsSource="{Binding}">
,從這個來自這個修改觀察到的集合中獲取數據:
public ObservableCollectionEx<FileItem> folder = new ObservableCollectionEx<FileItem>();
它是在使用FileSystemWatcher監視特定文件夾以添加,刪除和修改文件的類中創建的。
ObservableCollection被修改了(因此Ex在最後),這樣我就可以從外部線程修改它(代碼不是我的,我實際上是通過這個網站搜索了一下,發現它,像魅力一樣):
// This is an ObservableCollection extension
public class ObservableCollectionEx<T> : ObservableCollection<T>
{
// Override the vent so this class can access it
public override event System.Collections.Specialized.NotifyCollectionChangedEventHandler CollectionChanged;
protected override void OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
using (BlockReentrancy())
{
System.Collections.Specialized.NotifyCollectionChangedEventHandler eventHanlder = CollectionChanged;
if (eventHanlder == null)
return;
Delegate[] delegates = eventHanlder.GetInvocationList();
// Go through the invocation list
foreach (System.Collections.Specialized.NotifyCollectionChangedEventHandler handler in delegates)
{
DispatcherObject dispatcherObject = handler.Target as DispatcherObject;
// If the subscriber is a DispatcherObject and different thread do this:
if (dispatcherObject != null && dispatcherObject.CheckAccess() == false)
{
// Invoke handler in the target dispatcher's thread
dispatcherObject.Dispatcher.Invoke(DispatcherPriority.DataBind, handler, this, e);
}
// Else, execute handler as is
else
{
handler(this, e);
}
}
}
}
}
收集是由這些:
public class FileItem
{
public string Name { get; set; }
public string Path { get; set; }
}
這讓我保存的文件名稱和路徑。
一切都很正常,只要刪除和添加文件和列表框獲取相對於完美更新,以這兩個......然而,如果我改變任何文件的名稱,它不更新列表框。
我該如何通知FileItem屬性更改的列表框?我認爲ObservableCollection會處理這個問題,但顯然它只會在FileItem被添加或刪除時引發標誌,而不是在其內容被更改時引發標誌。
您的FileItem不執行INotifiyPropertyChanged ...還你怎麼在視圖模型/代碼隱藏文件名的更新? – Nitin