Загрузка простого массива в DataGrid в WPF - DataGrid показывает только длину каждого элемента - PullRequest
0 голосов
/ 12 июня 2018

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

Вот что у меня есть ...

XAML:

<Window x:Class="DataGridTesting.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DataGridTesting"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <DataGrid x:Name="hobbiesDataGrid" 
                  HorizontalAlignment="Left" Margin="118,84,0,0" VerticalAlignment="Top" Height="138" Width="360">
        </DataGrid>
    </Grid>
</Window>

Код сзади:

namespace DataGridTesting
{
    public partial class MainWindow : Window
    {
        string[] hobbies = new string[] { "Computers", "Cars", "Photography" };

        public MainWindow()
        {
            InitializeComponent();
            this.hobbiesDataGrid.ItemsSource = hobbies;
        }
    }
}

Вывод:

Длина
9
4
11

В первом столбце я ожидаю увидеть

хобби
Компьютеры
Автомобили
Фотография

Чего мне не хватает?Как правильно отобразить элементы в массиве в первом столбце DataGrid?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Вам необходимо настроить сетку так, чтобы столбцы не генерировались автоматически, поскольку в массиве нет контекста.

    <DataGrid x:Name="dataGrid" ItemsSource="{Binding}" HorizontalAlignment="Left" VerticalAlignment="Top" Height="128" Width="273" Margin="76,94,0,0" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Hobbies" Binding="{Binding}" />
        </DataGrid.Columns>
    </DataGrid>

Также обратите внимание, что для ItemsSource задано привязка, а для привязки - DataGridTextColumn.

0 голосов
/ 12 июня 2018

Вы не можете использовать строковый массив напрямую.

Проверьте следующий код:

        DataTable hobbies = new DataTable();
        hobbies.Columns.Add("hobbies");

        hobbies.Rows.Add(new object[] { "Computers" });
        hobbies.Rows.Add(new object[] { "Cars" });
        hobbies.Rows.Add(new object[] { "Photography" });

Затем используйте его как раньше:

        this.hobbiesDataGrid.ItemsSource = hobbies;

Все объясненоздесь: http://www.psworld.pl/Programming/BindingListOfString

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