WPF中DataGrid绑定数据可以使用struct结构体吗
前台界面的代码:
<DataGrid x:Name="dgEmp"
Margin="149,97,115,159"
AutoGenerateColumns="False"
ItemsSource="{Binding }">
<DataGrid.Columns>
<DataGridTextColumn Width="60"
Binding="{Binding Id}"
Header="员工编号" />
<DataGridTextColumn Width="80"
Binding="{Binding Name}"
Header="姓名" />
<DataGridTextColumn Width=" 80"
Binding="{Binding Phone}"
Header="联系电话" />
<DataGridTextColumn Width="120"
Binding="{Binding Mail}"
Header="邮箱" />
<DataGridTextColumn Width="180" Header="备注" />
</DataGrid.Columns>
</DataGrid>
有一个Entity员工的实体类,在此不缀代码了。
我现在先申明一个结构体:
public struct EmpStruct
{
public int _id;
public string _name;
public string _address;
public string _phone;
public string _mail;
}
在页面加载时读取数据库信息,
private void ContactPage_Loaded(object sender, RoutedEventArgs e)
{
DBConn dc = new DBConn();
//查询员工的员工编号、员工姓名、员工电话、员工邮箱
string contactSql = "SELECT Emp_id,Emp_name,Emp_address,Emp_phone,Emp_mail FROM my_emp";
MySqlDataReader msdr = dc.GetComand(contactSql);
//List<EmpStruct> list = new List<EmpStruct>();
while (msdr.Read())
{
EmpStruct empStruct = new EmpStruct();
empStruct._id = (int)msdr["Emp_id"];
empStruct._name = msdr["Emp_name"].ToString();
empStruct._address = msdr["Emp_address"].ToString();
empStruct._phone = msdr["Emp_phone"].ToString();
empStruct._mail = msdr["Emp_mail"].ToString();
list.Add(empStruct);
}
dgEmp.DataContext = list;
}
我想知道怎么才能实现在前台的数据绑定,使得struct中的数据显示到DataGrid中去。
才开始学习WPF,希望高手指路。如果能实现请详细说说,必要时附上代码及说明,如果不能实现请讲述理由
非常感谢。
木碎成屑。
9 years, 6 months ago
Answers
WPF双向绑定不支持字段 只支持属性 INotifyPropertyChanged
struct是按值传递 所以绑定后修改字段不会更新view
public class EmpStruct
{
public int id { get; set; }
...
}
<DataGridTextColumn Width="60" Binding="{Binding id}" Header="员工编号" />
无良MOA
answered 9 years, 6 months ago