效果如下:
1. 设计DataGrid展示的数据模型类
public class Song
{
public int Id { get; set; }
public string Title { get; set; }
public string Artist { get; set; }
public bool IsSoundtrack { get; set; }
public string MovieTitle { get; set; }
public Genre Genre { get; set; }
public DateTime ReleaseDateTime { get; set; }
public Uri URL { get; set; }
}
创建枚举类型
public enum Genre
{
HeavyMetal, HardRock, SoftRock, ClassicRock, Rock, Pop, PopSoul, Soul, Blues, Jazz, RB, Country, Folk, Funk,
Classical, ChristmasCarol, Classic
}
2. 创建模型的数据集合
用来展示在UI的DataGrid中
public class Songs
{
public List<Song> songList { get; set; } = GetSongs();
public static List<Song> GetSongs()
{
var file = System.IO.Path.Combine($"{ AppDomain.CurrentDomain.BaseDirectory}", "songs.txt");
var lines = File.ReadAllLines(file);
var list = new List<Song>();
for (int i = 0; i < lines.Length; i++)
{
try
{
var line = lines[i].Split(',');
var temp = line[2].Split(' ', '&', '-');
var gr = temp.Length > 1 ? temp[0] + temp[1] : temp[0];
var song = new Song()
{
Id = int.Parse(line[0]),
Title = line[1],
Artist = line[3],
IsSoundtrack = line[4].Trim() == "Unknown" ? false : true,
MovieTitle = line[4],
Genre = (Genre)Enum.Parse(typeof(Genre), gr),
URL = new Uri($"www.{line[3]}.com", UriKind.Relative),
ReleaseDateTime = DateTime.Parse(line[5] + ",01,01")
};
list.Add(song);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
return list;
}
3.UI添加数据绑定
添加DataContent
<Window.DataContext>
<local:Songs/>
</Window.DataContext>
添加Resource
<Window.Resources>
<Style TargetType="DataGridColumnHeader">
<Setter Property="FontSize" Value="16"/>
<Setter Property="FontWeight" Value="DemiBold"/>
<Setter Property="Background" Value="Black"/>
<Setter Property="Foreground" Value="White"/>
</Style>
<Style TargetType="DataGridCell">
<Setter Property="BorderBrush" Value="Gainsboro"/>
<Setter Property="BorderThickness" Value="3"/>
</Style>
</Window.Resources>
数据绑定
<Grid>
<DataGrid x:Name="DG" ItemsSource="{Binding songList}"
HorizontalGridLinesBrush="Blue"
VerticalGridLinesBrush="Green"
GridLinesVisibility="None"
CanUserAddRows="False"
CanUserSortColumns="True"
CanUserReorderColumns="False"
IsReadOnly="False"
CanUserResizeColumns="True"
CanUserResizeRows="True"
SelectionUnit="FullRow"
RowBackground="AliceBlue"
AlternatingRowBackground="LightGreen"
FlowDirection="LeftToRight"
FontSize="18"
FrozenColumnCount="3"
>
</DataGrid>
</Grid>
其中的属性可以做修改,再运行验证效果是如果变化的,加深对属性的理解。
网友评论