Directory.GetDirectories возвращает длину? - PullRequest
0 голосов
/ 25 сентября 2019

Я попробовал приведенный ниже код для получения имени каталога, но он показывает длину?

List<string> merchants = new List<string>();
foreach (string i in Directory.GetDirectories(Directory.GetCurrentDirectory() + "/Data/").ToList())
{
   merchants.Add(i);
}
merchantTable.ItemsSource = merchants;

результат равен

|Length|
_______________________
|20    |
|29    |

Я пробовал ниже ответы, но та же проблема

Как получить имя каталога

Получение имени папки из пути

Код WPF

<DataGrid x:Name="merchantTable" HorizontalAlignment="Left" Margin="15,39,0,0" VerticalAlignment="Top" Width="208" Height="343"/>

Обновление

Я использую MessageBox, он показывает Возвращенные значения - Полный путь, например C:\.....\Data\.....

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

DataGrid предназначен для отображения набора столбцов, обычно по одному для каждого свойства класса элемента данных, то есть типа элемента его коллекции ItemsSource.

Следовательно, не имеет смыслаиспользовать его для коллекции строк.Вместо этого используйте ListBox

<ListBox x:Name="merchantTable"/>

и упростите назначение ItemsSource:

merchantTable.ItemsSource = Directory.GetDirectories(
     Path.Combine(Directory.GetCurrentDirectory(), "Data"));

Если вам действительно нужно использовать DataGrid, определите столбец следующим образом:

<DataGrid x:Name="merchantTable" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Directory">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>
0 голосов
/ 25 сентября 2019

Этот код почти не имеет смысла;Вы вызываете метод, который возвращает массив строк, который затем преобразуете в список, который затем добавляете один за другим в другой список.

В любом случае, я думаю, что вы тогда сделали что-то вроде set DisplayMemberPath или BindingPathв @Length, и теперь ваш элемент управления списком показывает вам длину всех строк в списке - выполните отладочную печать торговцев [0], и это будет строка длиной 20 символов.Привязка данных обычно привязывается только к свойствам, а строка имеет только одно свойство.Если вы хотите связать с самой строкой, вам, вероятно, нужно связать столбец с путем .

Если вы хотите показать список имен папок, вам нужно позвонить

merchants.Add(Path.GetFileName(i.TrimEnd(Path.DirectorySeparatorChar)));

Когда GetFilename используется на пути, подобном c:\temp\myfolder, он возвращает MyFolder

, Trim () существует, потому что если вы вызываете GetFilename на c:\temp\myfolder\, вы получаете пустую строку, потому что онабуквально просто возвращает все после последнего слэша.(Что ничего)

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