DataGrid не полное заполнение из ItemResource
Есть класс
public class SomeClass
{
public string info { get; set; }
public long id { get; set; }
public string trunc { get; set; }
public int numbr { get; set; }
public double price { get; set; }
}
Я его вывожу в DataGrid MainDataGrid.ItemsSource = SomeClass;
Он выводится весь. Как можно вывести определённую информацию? Допустим, нужно вывести только id и price.
Ответы (1 шт):
Установите в xaml свойство для DataGrid - AutoGenerateColumns="False" и опишите колонки вручную.
<DataGrid ItemsSource="{Binding SomeClassCollection}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
<DataGridTextColumn Header="Price" Binding="{Binding Price}"/>
</DataGrid.Columns>
</DataGrid>
Создайте коллекцию, в которой будут храниться данные
public ObservableCollection<SomeClass> SomeClassCollection = new ObservableCollection<SomeClass>();
Чтобы DataGrid увидел эту коллекцию из xaml, нужно установить правильный DataContext у вашего окна, где находится сама таблица. Подробнее об этом можно узнать почитав про шаблон программирования MVVM.
По сути эта коллекция - то же самое что и List, только внутри себя внутри вызывает событие CollectionChanged при добавлении или удалении элементов, что сразу же замечает DataGrid и обновляет свой интефейс автоматически.
Сделайте так, чтобы класс SomeClass реализовал INotifyPropertyChanged для того, чтобы класс узнавал об изменениях, которые вносятся в ячейки таблицы вами, а таблица узнавала об изменениях, которые вносятся в данные класса из кода. За этим, собственно, и придуман Binding.
using System.ComponentModel;
public class SomeClass : INotifyPropertyChanged
{
private string _info;
private long _id;
private string _trunc;
private int _number;
private double _price;
public string Info
{
get => _info; // то же самое что get { return _info; }
set
{
_info = value;
OnPropertyChanged(nameof(Info)); // nameof(Info) здесь означает строку "Info"
}
}
public long Id
{
get => _id;
set
{
_id = value;
OnPropertyChanged(nameof(Id));
}
}
public string Trunc
{
get => _trunc;
set
{
_trunc = value;
OnPropertyChanged(nameof(Trunc));
}
}
public int Number
{
get => _number;
set
{
_number = value;
OnPropertyChanged(nameof(Number));
}
}
public double Price
{
get => _price;
set
{
_price = value;
OnPropertyChanged(nameof(Price));
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}