2010-07-16 115 views
0

我是從VB.Net WinForms來的。現在我想在WPF中編寫一個小應用程序,列出datagridview中的一些文件。我使用WPF的DataGrid,創建了一些列。然後未能添加我的行。WPF DataGrid行添加代碼隱藏

請你能幫我選擇正確的方法來獲得我的文件名,狀態文本和縮略圖添加到DataGrid行嗎?

在VB.Net的WinForms,我可以添加一行是這樣的:

Datagridview1.Rows.add(Myvalue, "RowStateText", "Hello World", MyDate) 

在WPF的DataGrid中,我可以添加

DataGrid1.Items.Add(New DataGridRow()) 

但如何來填補我的DataGridRow?

Private Sub AddFilesAndFolders(ByVal Base As IO.DirectoryInfo, ByRef dgv As DataGrid) 
     'For Each di As IO.DirectoryInfo In Base.GetDirectories 
     ' Call AddFilesAndFolders(di, dgv) 
     'Next 

     Dim item As DataGridRow 



     For Each fi As IO.FileInfo In Base.GetFiles 
      item = New DataGridRow'<-- test 1 (row is added but empty) 
      Dim di As New MyFileInfo'<-- test 2 (my own class with public members, but how to add as row with declared columns?) 
      di.FileName = fi.FullName 
      di.FileDate = fi.LastAccessTime 

      item.Item = fi.FullName 
      dgv.Items.Add(di) 
     Next 
    End Sub 
+0

好的。現在我決定添加項目的當前狀態作爲下載: http://www.goldengel.ch/temp/FileContent%20Replacer.zip – Nasenbaer 2010-07-19 08:43:33

回答

1

嗨:你應該設置一個ItemsSource而不是手動添加項目。如果列設置正確,那麼它就會「工作」!

dbv.ItemsSource = Base.GetFiles 

dbv.ItemsSource = CreateMyFileInfos(Base.GetFiles) 

如果您有任何更多的問題,請後回到這裏。

編輯:在第二次檢查,它看起來像你可能想遞歸地做。在這種情況下,您的AddFilesAndFolders可能會改爲CreateFilesAndFolders,它將返回FileInfo/MyFileInfo對象的集合,並以遞歸方式與子文件夾生成的集合合併;然後將從第一個調用返回的整個列表綁定到網格。

希望有幫助!

+0

嗨Kieren。我第一次嘗試你的示例:dbv.ItemsSource = Base.GetFiles。但是這已經不起作用了。我告訴我,可能有一個CreateMyFileInfos()函數,dgv如何知道在哪一列設置數據?我無法使用List(Of MyClass),可以嗎? – Nasenbaer 2010-07-16 09:16:39

+0

您是否在XAML中設置了DataGridView的列?這告訴控件在每列中顯示哪個字段 – 2010-07-16 09:42:26

+0

這是我的XAML。 <數據網格X:名稱= 「DGV」 Grid.Column = 「1」> < DataGridTextColumn部首= 「內容」/> Nasenbaer 2010-07-16 14:07:34

0

WPF是一種心態上的變化,你需要遠離Winforms的思維方式。

最終,您需要將ItemsSource設置爲IEnumerable,最好是ObservableCollection。

的最快途徑上手會放的ObservableCollection在你的代碼隱藏文件中的公共屬性:

public ObservableCollection<DirectoryInfo> files { get;set; } 

然後在構造函數或窗口加載事件,填充集合與您的數據,然後添加到XAML聲明您的DataGrid:

ItemsSource = "{Binding Path=files}" 

編輯:

我嘗試了這一點,使用DirectoryInfo類,以m我身後而Y碼補充說:

public ObservableCollection<DirectoryInfo> Dir = new ObservableCollection<DirectoryInfo>(); 
    public Window1() 
    { 
     InitializeComponent(); 
     Dir.Add(new DirectoryInfo("c:\\")); 
     Dir.Add(new DirectoryInfo("c:\\temp\\")); 
     dataGrid1.ItemsSource = Dir; 
    } 

出於某種原因,這不是通過XAML中使用數據綁定工作,但我並沒有非常努力地得到它的工作。

+0

謝謝本。我相信你是對的,我必須提醒我。請,你能舉個簡單的例子嗎?我可以在哪裏放置Ovservable Flag?以及如何獲取單個字符串(不僅僅是DirectoryInfo)。 public ObservableCollection files {get; set; } ? – Nasenbaer 2010-07-16 09:13:25

+0

在我的XAML中,我沒有ItemSource屬性可供選擇。或者在哪裏設置? – Nasenbaer 2010-07-16 14:10:34

+0

如果用於集合的自己對象中的數據在運行時發生更改,則應使其成爲ObservableObject併爲其中的每個值引發propertychange。 DataGrid會自動反映這些變化。 – Johncl 2012-11-14 13:41:21