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