リストボックスがあります:
<ListBox x:Name="lbxAF" temsSource="{Binding}">
この変更された Observable Collection からこれからデータを取得します。
public ObservableCollectionEx<FileItem> folder = new ObservableCollectionEx<FileItem>();
これは、FileSystemWatcher を使用して特定のフォルダーでファイルの追加、削除、および変更を監視するクラス内で作成されます。
ObservableCollection が変更されたため (したがって、最後に Ex がありました)、外部スレッドから変更できるようになりました (コードは私のものではありません。実際にこの Web サイトを検索したところ、魅力的に機能することがわかりました)。
// 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; }
}
これにより、ファイルの名前とパスを保存できます。
ファイルの削除と追加に関する限り、すべてがうまく機能し、リストボックスはこれら2つに関して問題なく更新されます...ただし、ファイルの名前を変更しても、リストボックスは更新されません。
FileItem のプロパティの変更をリスト ボックスに通知するにはどうすればよいですか? 私は ObservableCollection がそれを処理すると仮定しましたが、明らかに、その内容が変更されたときではなく、FileItem が追加または削除されたときにのみフラグを立てます。