# aardio 范例: 嵌入 WPF 控件 DataGrid

```aardio
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio 嵌入 WPF 控件 DataGrid";right=759;bottom=469)
winform.add(
custom={cls="custom";left=12;top=11;right=751;bottom=460;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/

// 加载相关程序集并导入 .NET 命名空间
import System.Windows.Forms.Integration; // WPF 必须导入这个库

//创建 WPF 宿主控件
var elementHost = System.Windows.Forms.Integration.ElementHost(winform.custom);

var xaml = `
<DataGrid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          x:Name="grid" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          AutoGenerateColumns="False" CanUserAddRows="False" 
          AlternatingRowBackground="#F5F5F5">
    <DataGrid.Columns>
        <DataGridTextColumn Header="姓名" Binding="{Binding Name}" Width="100"/>
        <DataGridTextColumn Header="年龄" Binding="{Binding Age}" Width="60"/>
        <DataGridTextColumn Header="城市" Binding="{Binding City}" Width="*"/>
        <DataGridCheckBoxColumn Header="在职" Binding="{Binding Active}" Width="50"/>
    </DataGrid.Columns>
</DataGrid>
`;

//解析 XAML 返回 WPF 控件
var grid = System.Windows.Markup.XamlReader.Parse(xaml);

// 添加数据（使用 System.Dynamic.ExpandoObject 动态创建对象）
import System.Dynamic; //必须自标准库导入这个库

//第一种写法：
/*
var items = System.Dynamic.ExpandoObject.ObservableCollection();
for(i=1;10){
    var row = System.Dynamic.ExpandoObject({
    	Name =  "用户" ++ i;
    	Age = 20 + i;
    	City = ({"北京";"上海";"广州";"深圳"})[(i-1)%4+1];
    	Active = i%2==0;
    }); 
    
    items.Add(row);
}
*/

//第二种写法：
var array = [];
for(i=1;10){
	array[i] = {
    	Name =  "用户" ++ i;
    	Age = 20 + i;
    	City = ({"北京";"上海";"广州";"深圳"})[(i-1)%4+1];
    	Active = i%2==0;
    }
}

var items = System.Dynamic.ExpandoObject.ObservableCollection(array);

grid.ItemsSource = items;

//将 WPF 控件添加到窗口上
elementHost.Child = grid;

winform.show();
win.loopMessage();
```