在UWP中基本上看不到DataTable的使用, 所以一般DataGrid绑定的都是对象的列表。下面是一个比较简单的绑定代码。
XAML:
<controls:DataGrid Name="SecondGrid" ItemsSource="{Binding Persons}" AutoGenerateColumns="False" Grid.Row="2">
<controls:DataGrid.Columns>
<controls:DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<controls:DataGridTextColumn Header="Age" Binding="{Binding Age}"/>
<controls:DataGridTextColumn Header="City" Binding="{Binding City}"/>
</controls:DataGrid.Columns>
</controls:DataGrid>
C#:
namespace UWPDataGrid
{
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
public sealed partial class MainPage : Page
{
public List<Person> Persons = new List<Person>();
public MainPage()
{
this.InitializeComponent();
Persons.Add(new Person() { Name = "Alan", Age = 12, City = "Shanghai" });
Persons.Add(new Person() { Name = "Blair", Age = 22, City = "Manhantan" });
Persons.Add(new Person() { Name = "Clair", Age = 26, City = "Berlin" });
SecondGrid.ItemsSource = Persons;
}
}
}
可以看到上面的绑定非常简单,因为对象属性都是简单属性。如果我们遇到对象的属性比较复杂的时候,比如List, Dictionary, Class, 那我们如何绑定呢?
请参看下面的示例,然后大家自由发挥,自由扩展吧。
public class Car
{
public string Brand { get; set; }
public string Model { get; set; }
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
public List<string> Pets { get; set; }
public Dictionary<string, int> ChildrenAge { get; set; }
public List<Car> Cars { get; set; }
}
public sealed partial class MainPage : Page
{
public List<Person> Persons = new List<Person>();
public MainPage()
{
this.InitializeComponent();
Persons.Add(new Person()
{
Name = "Alan",
Age = 42,
City = "Shanghai",
Pets = new List<string> { "Dog", "Cat", "Pig" },
ChildrenAge = new Dictionary<string, int>() { { "First", 12 }, { "Second", 6 } },
Cars = new List<Car>() { new Car() { Brand="BMW", Model="750"} }
});
Persons.Add(new Person()
{ Name = "Blair", Age = 32, City = "Manhantan",
Pets = new List<string> { "Dog" },
ChildrenAge = new Dictionary<string, int>() { { "First", 4 }, { "Second", 2 } },
Cars = new List<Car>() { new Car() { Brand = "Ford", Model = "focus" } }
});
Persons.Add(new Person()
{
Name = "Clair",Age = 26,City = "Berlin",
Pets = new List<string> { "Cat", "Pig" },
ChildrenAge = new Dictionary<string, int>() { { "First", 1 } },
Cars = new List<Car>() { new Car() { Brand = "Volkswargen", Model = "Lavida" } }
});
SecondGrid.ItemsSource = Persons;
}
<controls:DataGrid Name="SecondGrid" ItemsSource="{Binding Persons}" AutoGenerateColumns="False" Grid.Row="2">
<controls:DataGrid.Columns>
<controls:DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<controls:DataGridTextColumn Header="Age" Binding="{Binding Age}"/>
<controls:DataGridTextColumn Header="City" Binding="{Binding City}"/>
<controls:DataGridTextColumn Header="Pet1" Binding="{Binding Pets[0]}"/>
<controls:DataGridTextColumn Header="Car1 Brand" Binding="{Binding Cars[0].Brand}"/>
<controls:DataGridTextColumn Header="First Child Age" Binding="{Binding ChildrenAge[First]}"/>
</controls:DataGrid.Columns>
</controls:DataGrid>