我有一个ListView,它可以显示特定文件夹中的.txt文件。我希望在向该文件夹中添加(或删除)文件时,ListView能够自动更新。我在Internet上找到了FileSystemWatcher类,但无法使程序正常运行。有人有什么提示吗?我对C#编程还比较陌生。
我的XAML代码:
<ScrollViewer Grid.Row="1" Grid.ColumnSpan="2" DockPanel.Dock="Top">
<ListView x:Name="TxtListView" SelectionMode="Multiple">
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox Tag="{Binding .}" IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Path=IsSelected}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn/>
<GridViewColumn/>
<GridViewColumn/>
<GridViewColumn/>
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
</ScrollViewer>
程式码后置:
public partial class MainWindow : Window
{
public string path = @"C:\txt";
public MainWindow()
{
InitializeComponent();
//Read txt Files
DirectoryInfo d = new DirectoryInfo(path);
FileInfo[] txtFiles = d.GetFiles();
TxtListView.ItemsSource = txtFiles;
MonitorDirectory(path);
}
public void MonitorDirectory(string path)
{
FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
fileSystemWatcher.Path = path;
fileSystemWatcher.Created += FileSystemWatcher_Created;
fileSystemWatcher.EnableRaisingEvents = true;
}
private void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
{
DirectoryInfo d = new DirectoryInfo(path);
FileInfo[] txtFiles = d.GetFiles();
TxtListView.ItemsSource = txtFiles;
}
//Refresh-Button
private void Refresh(object sender, RoutedEventArgs e)
{
DirectoryInfo d = new DirectoryInfo(path);
FileInfo[] txtFiles = d.GetFiles();
TxtListView.ItemsSource = txtFiles;
}
}
1条答案
按热度按时间uqzxnwby1#
下面是一个使用MVVM体系结构模式的简单示例。
有一个视图模型类,它包含
FileSystemWatcher
和FileInfo
对象的ObservableCollection
,这些对象用作视图中数据绑定的源。您必须注意FileSystemWatcher的事件是在后台线程中激发的,例如,通过使用
EnableCollectionSynchronization
方法。将视图模型的示例分配给MainWindow的
DataContext
属性表示在检视中启用数据系结。
下面的XAML也使用
CollectionViewSource
来启用排序。