WPF DataGrid Row后面添加代码

时间:2010-07-16 07:48:15

标签: wpf datagrid row add

我来自VB.Net WinForms。现在我想在WPF中编写一个小应用程序,在datagridview中列出一些文件。我使用了WPF的DataGrid,创建了一些Columns。然后无法添加我的行。

那么,您能帮我选择正确的方法来将我的文件名,状态文本和缩略图添加到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

2 个答案:

答案 0 :(得分:1)

嗨:你应该设置一个ItemsSource而不是手动添加项目。如果列设置正确,那么它将“正常工作”!

dbv.ItemsSource = Base.GetFiles

dbv.ItemsSource = CreateMyFileInfos(Base.GetFiles)

如果您还有其他问题,请回复此处。

编辑:在第二次检查时,您可能希望以递归方式执行此操作。在这种情况下,您的AddFilesAndFolders可以是CreateFilesAndFolders,它将返回FileInfo / MyFileInfo对象的集合,并递归地与子文件夹生成的集合合并;然后将从第一次调用返回的整个列表绑定到网格。

希望有所帮助!

答案 1 :(得分:0)

WPF是一种心态变化,你需要摆脱Winforms的思维方式。

最终你需要将ItemsSource设置为IEnumerable,最好是ObservableCollection。

最快的入门方法是将ObservableCollection作为公共属性放在代码隐藏文件中:

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

然后在构造函数或Window上的Load事件中,使用您的数据填充集合,然后添加到DataGrid的Xaml声明中:

ItemsSource = "{Binding Path=files}"

编辑:

我使用DirectoryInfo类尝试了这一点,在我添加的代码后面添加了:

    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使用数据绑定,但我并没有非常努力地让它工作。