So binden Sie eine Sammlung, um ein ListView WPF
Ich habe ein Programm, das sucht in einem Verzeichnis nach Dateien mit bestimmten Kriterien. Dieser such-Prozess dauert lange Zeit, also ich nenne es asynchron. Wenn der Suchalgorithmus eine Datei findet, löst er ein Ereignis aus. Meine MainWindow
Instanz Listener für dieses Ereignis und muss zur Aktualisierung der GUI. Wie kann ich binden diese "zusätzlichen" Dateien zu einem ListView
? Ich dachte, ich könnte eine ObservableCollection<FileInfo>
Instanz, aber ich kann nicht herausfinden, wie es zu binden.
Habe ich entfernt, alle relevanten Steuerelemente und den code. Hier sind die beiden relevanten Dateien.
MainWindow.xaml:
<Window x:Class="Example.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="CR Search" Height="395" Width="525">
<Grid>
<ListView x:Name="Results">
<ListView.View>
<GridView>
<GridViewColumn Header="Filename"/>
<GridViewColumn Header="Directory"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
MainWindow.xaml.cs:
using System.IO;
using System.Threading.Tasks;
public partial class MainWindow
{
private SearchLogic _backgroundSearch;
private async void Search(object sender, RoutedEventArgs e)
{
//TODO: clear Results
_backgroundSearch = new SearchLogic("", new DirectoryInfo("C:\"));
_backgroundSearch.FileAdded += FileAdded;
await Task.Run(new Action(_backgroundSearch.Search));
}
private void FileAdded(object sender, FileAddedEventArgs eventArgs)
{
//TODO: add eventArgs.File to Results
//eventArgs.File is an instance of FileInfo
}
}
InformationsquelleAutor Tyler Crompton | 2013-04-01
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein einfaches Beispiel
XAML
Ihre Code-Behind -
Wenn Sie dieses problem bemerken Sie, dass das Listenfeld aktualisiert jede halbe Sekunde mit einem neuen Element. Grundsätzlich ist die wichtige Sache zu beachten ist, dass die ObservableCollection kann nur aktualisiert werden, von den UI-thread also, wenn Sie überarbeiten Sie den obigen code müssen Sie brauchen, um irgendwie die Dispatcher des aktuellen UI-thread zu aktualisieren
ObservableCollection
? Wie eine Sammlung vonFileInfo
Objekte. Wie kann ich binden das mit dem Namen und Verzeichnis zu Spalten in derListView
?FileInfo
ist wandelbar ist, und ändern Sie seine Eigenschaften nach dem hinzufügen zu der Liste, die Sie implementieren müssen, umINotifyPropertyChanged
auf, so dass UI updatesSystem.IO.FileInfo
Klasse. Mit dieser sagte, gibt es einen Grund, Sie verwenden einListBox
statt einerListView
?