WPF / C#将自定义对象列表数据绑定到ListBox?

我遇到了一些墙,能够将我的自定义对象列表的数据绑定到WPF中的ListBox

这是自定义对象:

 public class FileItem { public string Name { get; set; } public string Path { get; set; } } 

这是清单:

 private List folder = new List(); public List Folder { get { return folder; } } 

当文件被移动,删除,重命名等时,该列表由FileSystemWatcher填充和维护。所有列表都保留了名称和路径的轨道。

这是我在MainWindow代码隐藏文件中的内容(它现在用于测试目的的硬编码):

 FolderWatcher folder1 = new FolderWatcher(); folder1.Run(@"E:\MyApp\test", "*.txt"); listboxFolder1.ItemsSource = folder1.Folder; 

这是我的XAML部分:

  

不幸的是,唯一显示的是每个条目的MyApp.FileItem 。 如何显示名称等特定属性?

您需要为ListBox定义ItemTemplate

         

最简单的方法是覆盖FileItem上的ToString ,(列表框使用它来填充每个条目)

  public override string ToString() { return Name; } 

列表框中显示的每个项目都会自动调用ToString方法来显示它,并且由于您没有覆盖它,因此它会显示该类型的名称。

所以,你可以在这里做两件事。

  1. 像Sayse建议的那样覆盖ToString方法。
  2. 使用DataTemplate并单独绑定每个属性

在您的资源中,使用密钥添加模板

        

并将其作为列表框ItemTemplate

  

如果现在有人通过搜索遇到这个问题,我在C#UWP应用程序中遇到了几乎相同的问题。

虽然Nitin上面的答案中的XAML位是必要的,但它们并没有单独解决问题 – 我还必须将我的等效Folder更改为ObservableCollection而不是List ,以使ListBox显示我需要的属性。