WPF DataGrid Row добавить в коде позади - PullRequest
0 голосов
/ 16 июля 2010

Я из прихода VB.Net WinForms. Теперь я хотел написать небольшое приложение в WPF, перечислив некоторые файлы в виде таблицы данных. Я использовал WPG DataGrid, создал несколько столбцов. И тогда не удалось добавить мои строки.

Не могли бы вы помочь мне выбрать правильный способ добавления имен файлов, текста состояния и миниатюр к строке DataGrid?

В VB.Net WinForms я могу добавить строку, подобную этой:

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

В DataGrid WPF я могу добавить

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 ]

1 голос
/ 16 июля 2010

Привет: вы должны установить ItemsSource вместо добавления элементов вручную. Если столбцы настроены правильно, он просто «заработает»!

dbv.ItemsSource = Base.GetFiles

или

dbv.ItemsSource = CreateMyFileInfos(Base.GetFiles)

Если у вас есть какие-либо проблемы, пожалуйста, напишите сюда.

Редактировать: при второй проверке похоже, что вы захотите сделать это рекурсивно. В этом случае ваш AddFilesAndFolders может вместо этого быть CreateFilesAndFolders, который будет возвращать коллекцию объектов FileInfo / MyFileInfo, слитную с коллекциями, созданными дочерними папками; затем привяжите весь список, возвращенный после первого вызова, к сетке.

Надеюсь, это поможет!

0 голосов
/ 16 июля 2010

WPF - это изменение мышления, вам нужно уйти от мышления Winforms.

В конечном итоге вам необходимо установить для ItemsSource значение IEnumerable, предпочтительно ObservableCollection.

Самый быстрый способ начать работу - поместить ObservableCollection в качестве общедоступного свойства в вашем файле с выделенным кодом:

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

Затем в конструкторе или событии Load в окне заполните коллекцию своими данными, а затем добавьте в объявление Xaml для вашей DataGrid:

ItemsSource = "{Binding Path=files}"

EDIT:

Я попробовал это с помощью класса 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, но я не очень старался заставить его работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...