我是 DataBindings 的新手。我正在尝试将文件列表(更准确地说是 a IEnumerable<FileInfo>
)绑定到ListView
C#(Visual Studio 2010)中的 a 。这是我想要做的(我做了很多试验,这是最简单的发布):
我的 XAML 是(其他地方没有定义资源/数据绑定):
<ListView
Name="lvInvoices" Height="Auto" HorizontalAlignment="Center" VerticalAlignment="Stretch"
Width="Auto" MinWidth="150" MinHeight="100" Margin="10">
<ListView.View>
<GridView>
<GridViewColumn Header="#" Width="Auto"/>
<GridViewColumn Header="Fichero" Width="Auto" DisplayMemberBinding="{Binding Path=SourceFile}"/>
<GridViewColumn Header="Importe" Width="Auto"/>
</GridView>
</ListView.View>
</ListView>
我的“项目”课程是这样的。我知道我没有触发 PropertyChanged 事件,现在我只想填充列表。
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SPInvoiceLoader
{
public class Invoice : System.ComponentModel.INotifyPropertyChanged
{
public Invoice()
{
}
public Invoice(FileInfo srcFile)
{
this.SourceFile = srcFile;
}
public FileInfo SourceFile { get; private set; }
public int SpId { get; set; }
public Decimal Amount { get; set; }
public string Nif { get; set; }
public bool Signed { get; set; }
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
}
}
设置 DataContext 的代码是:
IEnumerable<FileInfo> pdfFiles = dir.EnumerateFiles("*.pdf");
pdfFiles = pdfFiles.OrderBy(f => f.Name);
ObservableCollection<Invoice> coll = new ObservableCollection<Invoice>();
foreach (FileInfo pdfFile in pdfFiles)
{
coll.Add(new Invoice(pdfFile));
}
this.lvInvoices.DataContext = coll;
我尝试将pdfFiles
两者都设置为局部变量和实例成员,但无论哪种方式都不起作用。
效果是根本没有更新任何项目,列表继续为空。
有什么建议吗?我对此很陌生,所以不排除愚蠢的错误。
提前致谢