我对 C# 和 WPF 比较陌生,我是否在努力获取要显示的文件信息列表。下面是我正在使用的代码。我已经测试过该集合填充了正确的信息,但我只是无法将其显示在表格中。
这是我尝试用来显示集合的 XAML 代码
<ListView Name="lvFiles" ItemsSource="{Binding allFileList}">
<ListView.View>
<GridView>
<GridViewColumn Width="160" Header="File Name" DisplayMemberBinding="{Binding FileName}"/>
<GridViewColumn Width="160" Header="File Path" DisplayMemberBinding="{Binding FilePath}"/>
<GridViewColumn Width="160" Header="Date Created" DisplayMemberBinding="{Binding DateCreated}"/>
<GridViewColumn Width="150" Header="File Size" DisplayMemberBinding="{Binding FileSize}"/>
</GridView>
</ListView.View>
</ListView>
这是我用来创建集合的代码隐藏
public partial class FilePanel : UserControl
{
public class FileList
{
public string FileName { get; set; }
public string FilePath { get; set; }
public string DateCreated { get; set; }
public string FileSize { get; set; }
public FileList()
{
}
}
public static class FileSizeFormatter
{
static readonly string[] suffixes = { "Bytes", "KB", "MB", "GB", "TB" };
public static string FormatSize(Int64 bytes)
{
int counter = 0;
decimal number = (decimal)bytes;
while (Math.Round(number / 1024) >= 1)
{
number = number / 1024;
counter++;
}
return string.Format("{0:n1}{1}", number, suffixes[counter]);
}
}
public FilePanel()
{
InitializeComponent();
ObservableCollection<FileList> allFileList = new ObservableCollection<FileList>();
var searchPath = @"C:\Users\";
FileInfo[] files = new DirectoryInfo(searchPath).GetFiles("*", new EnumerationOptions
{
IgnoreInaccessible = true,
RecurseSubdirectories = true
});
foreach (FileInfo file in files)
{
var fileSize = FileSizeFormatter.FormatSize(file.Length);
allFileList.Add(new FileList
{
FileName = file.Name,
FilePath = file.DirectoryName,
DateCreated = file.CreationTime.ToShortDateString(),
FileSize = fileSize
});
}
lvFiles.DataContext = allFileList;
}
}
我尝试过 DataContext = this 并将这些信息放入网格而不是列表视图中,但没有显示任何内容。
必须使用 lvFiles.ItemsSource 而不是 lvFiles.DataContext