代码之家  ›  专栏  ›  技术社区  ›  Nasenbaer

WPF DataGrid行加载项代码隐藏

  •  0
  • Nasenbaer  · 技术社区  · 14 年前

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

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

    在WPF的DataGrid中我可以添加

    DataGrid1.Items.Add(New 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 回复  |  直到 14 年前
        1
  •  1
  •   Kieren Johnstone    14 年前

    您好:您应该设置ItemsSource,而不是手动添加项。如果列设置正确,那么它将只是'工作'!

    dbv.ItemsSource = Base.GetFiles
    

    dbv.ItemsSource = CreateMyFileInfos(Base.GetFiles)
    

    编辑:在第二次检查时,您可能希望递归地执行该操作。在这种情况下,你的 AddFilesAndFolders 可能是 CreateFilesAndFolders

    希望有帮助!

        2
  •  0
  •   benPearce    14 年前

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

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

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

    然后在构造函数或窗口上的加载事件中,用数据填充集合,然后添加到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;
        }