Reputation: 11
I have objects as below:
public class FootballTeam
{
public int Id { get; set; }
public string Name { get; set; }
public string Country { get; set; }
public virtual ICollection<TeamDate> TeamDates { get; set; }
}
public class TeamDate
{
public int Id { get; set; }
public DateTime date { get; set; }
public virtual FootballTeam FootballTeam { get; set; }
}
How can I display array of FootballTeam in DataGrid in WPF?
Upvotes: 0
Views: 514
Reputation: 564
If you are using the MVVM pattern you can do as follows. You can create a Model (FootballTeam) as you did in the question, process this model in ViewModel and display it on your Screen.
You can find more detailed information about ObservableCollection here. You can get detailed answers from the question about binding data to DataGrid here.
Model
public class FootballTeam
{
public int Id { get; set; }
public string Name { get; set; }
public string Country { get; set; }
public DateTime Time { get; set; }
}
ViewModel
class MainWindowViewModel
{
public static readonly ObservableCollection<FootballTeam> footballTeams = new ObservableCollection<FootballTeam>();
public ICollectionView footballTeamsCollectionView { get; private set; }
public MainWindowViewModel()
{
footballTeamsCollectionView = CollectionViewSource.GetDefaultView(footballTeams);
AddTeam(1,"Juventus","Italy",DateTime.Now);
}
private void AddTeam(int Id, string Name, string Country, DateTime Time)
{
var item = new FootballTeam();
item.Id = Id;
item.Name = Name;
item.Country = Country;
item.Time = Time;
footballTeams.Add(item);
}
}
MainWindow.xaml
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding footballTeamsCollectionView , IsAsync=True}"
IsReadOnly="True"
Height="480">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}" FontWeight="Bold"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Country" Binding="{Binding Country}"/>
<DataGridTextColumn Header="TeamDates" Binding="{Binding Time, StringFormat=\{0:dd.MM.yy HH:mm:ss\}}"/>
</DataGrid.Columns>
</DataGrid>
MainWindow.xaml.cs
public MainWindow()
{
InitializeComponent();
DataContext = new MainWindowViewModel();
}
If you don't want to use the MVVM pattern, you can do as follows as a second option.
MainWindow.xaml.cs
public MainWindow()
{
InitializeComponent();
// DataContext = new MainWindowViewModel();
MyDataGrid.ItemsSource = footballTeamsCollection();
}
private List<FootballTeam> footballTeamsCollection()
{
List<FootballTeam> footballTeams = new List<FootballTeam>();
footballTeams.Add(new FootballTeam()
{
Id = 1,
Name = "Juventus",
Country = "Italy",
Time = DateTime.Now
});
footballTeams.Add(new FootballTeam()
{
Id = 2,
Name = "Tottenham",
Country = "England",
Time = DateTime.Now
});
return footballTeams;
}
MainWindow.xaml
<DataGrid Name="MyDataGrid"
AutoGenerateColumns="False"
IsReadOnly="True"
Height="480">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}" FontWeight="Bold"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Country" Binding="{Binding Country}"/>
<DataGridTextColumn Header="TeamDates" Binding="{Binding Time, StringFormat=\{0:dd.MM.yy HH:mm:ss\}}"/>
</DataGrid.Columns>
</DataGrid>
Upvotes: 1