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

问题描述:

我陷入了困境,能够将自定义对象列表的数据绑定到WPF中的ListBox.

I've ran into a bit of a wall with being able to bind data of my custom object list to a ListBox in WPF.

这是自定义对象:

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

这是列表:

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

随着文件的移动,删除,重命名等操作,列表由FileSystemWatcher填充和维护.列表的全部作用是跟踪名称和路径.

The list gets populated and maintained by a FileSystemWatcher as files get moved around, deleted, renamed, etc. All the list does is keeps tracks of names and paths.

这是MainWindow后台代码文件中的内容(目前已出于测试目的对其进行了硬编码):

Here's what I have in the MainWindow code-behind file (it's hard coded for testing purposes for now):

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

listboxFolder1.ItemsSource = folder1.Folder;

这是我的XAML部分:

Here's my XAML portion:

<ListBox x:Name="listboxFolder1" Grid.Row="1" BorderThickness="0" 
         ItemsSource="{Binding}"/>

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

Unfortunately, the only thing that gets displayed is MyApp.FileItem for every entry. How do I display the specific property such as name?

您将需要为ListBox定义ItemTemplate

You will need to define the ItemTemplate for your ListBox

    <ListBox x:Name="listboxFolder1" Grid.Row="1" BorderThickness="0" 
     ItemsSource="{Binding}">
       <ListBox.ItemTemplate>
         <DataTemplate>
           <TextBlock Text="{Binding Name}"/>
         </DataTemplate>
       </ListBox.ItemTemplate>
     </ListBox>