Созданный список привязки данных к WPF DataGrid - PullRequest
0 голосов
/ 17 июня 2020

Я разработал метод создания списка элементов, которые будут отображаться в моем WPF DataGrid. Список заполнен данными, которые мне нужны, но я не могу понять, как отобразить их в моем DataGrid. Я впервые использую собственный источник данных. Я прочитал документацию по привязке данных и контексту данных, но не нашел ничего, что помогло бы мне решить мою проблему. Вот ошибка, которую я получаю:

System. Windows .Data Error: 40: Ошибка пути BindingExpression: свойство «Тип» не найдено в «объекте» «Char» (HashCode = 7536755) » . BindingExpression: Путь = Тип; DataItem = 'Char' (HashCode = 7536755); целевой элемент - TextBlock (Name = ''); целевое свойство - «Текст» (тип «Строка»)

Я не могу сказать, является ли это ошибкой пути или преобразованием данных. Я не думаю, что это проблема с типом данных, и все они строковые в текстовых столбцах. Итак, я испортил свой XAML, чтобы попытаться исправить путь. Оставив меня с:

<DataGrid x:Name="resourcesGrid" ItemsSource="{Binding Source= resourceList}" HorizontalAlignment="Left" Height="215" VerticalAlignment="Top" Width="240" Margin="30,57,0,0" FontSize="8" AutoGenerateColumns="False" MinColumnWidth="15" MaxColumnWidth="70">
                    <DataGrid.Columns>
                        <DataGridCheckBoxColumn x:Name="resourceCheck"  Binding="{Binding Path=Check}"/>
                        <DataGridTextColumn x:Name="resourceName"  Binding="{Binding Path=Name}" FontSize="6" Header="Resource Name" IsReadOnly="True" MinWidth="80"/>
                        <DataGridTextColumn x:Name="resourceEmail"  Binding="{Binding Path=Email}" FontSize="6" Header="Email" IsReadOnly="True" MinWidth="80"/>
                        <DataGridTextColumn x:Name="resourceType"  Binding="{Binding Path=Type}" FontSize="6" Header="Resource Type" HeaderStringFormat="" IsReadOnly="True"/>
                    </DataGrid.Columns>
                </DataGrid>

Метод для заполнения списка:

public List<Resources> PopulateResourceList(string path)
    {
        using (var stream = File.OpenRead(path))  // open file
        using (var reader = new StreamReader(stream))   // read the stream with TextReader
        {
            string line;
            string rname = String.Empty;
            string remail = String.Empty;
            string rtype = String.Empty;
            List<Resources> items = new List<Resources>();

            reader.ReadLine();
            while ((line = reader.ReadLine()) != null)
            {
                string[] elements = line.Split(',');

                rname = elements[1];
                remail = elements[3];
                //needs changed. add type to table and populate it
                rtype = String.Empty;

                Resources resource = new Resources
                {
                    Check = false,
                    Name = rname,
                    Email = remail,
                    Type = rtype
                };

                items.Add(resource);

            }
            //resourceGrid.ItemsSource = items;
            return items;
        }
    }

Инициализация списка ресурсов:

    List<Resources> resourceList;
    public Window1()
    {
        InitializeComponent();
        this.DataContext = this;
        availGrid_Headers();
        resourceList = PopulateResourceList(Paths.resourcePath);
        //resourceGrid.ItemsSource = PopulateResourceList(Paths.resourcePath);
    }

Я пробовал несколько разных подходов к привязкам и ItemsSource в XAML. Я также добавил строку: "this.DataContext = this;" в cs, чтобы он ссылался на код, который у меня есть в cs. Это моя первая привязка к моему собственному источнику данных, поэтому я буду благодарен за любую помощь.

Спасибо, -Дэн

1 Ответ

1 голос
/ 17 июня 2020

Свойство Itemsource привязано к свойству resourceList, определенному в коде, который я предполагаю. Его следует использовать как путь для Itemsource. В вашем текущем XAML для расширения разметки источника Itemsource задана строка «resourceList», а не свойство «resourceList». Измените источник элементов, как это

<DataGrid x:Name="resourcesGrid" ItemsSource="{Binding Path=resourceList}"  

Также вы установили для контекста данных экземпляр «this». Следовательно, свойство источника элемента источника наследуется для контекста данных, поэтому коллекция «список ресурсов» будет путем в контексте контекста данных. для источника данных. Сделайте список ресурсов свойством publi c, чтобы оно было видимым для привязки.

...