我是DataBindings的新手。我試圖將文件列表(更合適的,IEnumerable<FileInfo>
)綁定到C#(Visual Studio 2010)中的ListView
。這裏就是我想要做(我已經做了很多試驗,這是最簡單的發佈):將數據綁定到ListView
我的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>
我'item'類是這個。我知道我不發射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
既作爲一個局部變量和一個實例成員,但它不工作,無論哪種方式。
效果是根本沒有項目被更新,列表仍然是空的。
有什麼建議嗎?我很新,所以不要排除愚蠢的錯誤。
在此先感謝
嘗試將ListView上的ItemsSource設置爲{Binding},以便知道從其DataContext中獲取其項目,如下所示:ItemsSource =「{Binding}」 – tomasmcguinness 2012-04-12 13:54:05
@tomasmcguinness您是對的,謝謝。把這個作爲答案,我可以接受它 – SJuan76 2012-04-12 13:58:36