我有一个带有访问数据库文件的ListView,我正在尝试将所选项目绑定到SelectedEmployee
属性。
<ListView x:Name="ListEmployee"
SelectedItem="{Binding SelectedEmployee}"
ItemsSource="{Binding Path=Employees}">
<ListView.View>
<GridView>
<GridViewColumn Header="Employee ID" DisplayMemberBinding="{Binding ID}"/>
<GridViewColumn Header="Employee Name" DisplayMemberBinding="{Binding FullName}"/>
</GridView>
</ListView.View>
</ListView>
当我为此搜索解决方案时,列表中的项目类别是相同的,属性的属性是相同的。我的问题是我不知道构成列表中项目的课程是什么。
目前,这就是我填写列表的方式:
string connectionString = ConfigurationManager.ConnectionStrings["DatabaseConnection"].ConnectionString;
string cmd = "SELECT ID, FullName FROM Employees";
OleDbDataAdapter Adapter = new OleDbDataAdapter(cmd, connectionString);
Adapter.Fill(Data, "Employees");
ListEmployee.DataContext = Data;
和我用于SelectedEmployee
的课程是:
public class Employee
{
public int ID { get; set; }
public string FullName { get; set; }
}
我已经测试过是否 ListEmployee.SelectedItem is SelectedEmployee
且它返回false,我找不到一种方法,如何创建与列表中相同类型的类匹配的类
所以我的问题是我如何绑定所选项目而又不知道构成SelectedItem的类。任何想法都会有用
我认为Adapter.Fill
正在创建一个包含表和DataRows
的Dataset
。因此,SelectedItem将是datarow。
我要做的是从数据集中创建员工对象列表,并与之绑定:
Adapter.Fill(Data, "Employees");
var employees = new List<Employee>();
foreach(var row in Data.Tables[1].Rows)
{
var employee = new Employee();
employee.ID = Convert.ToInt32(row["ID"].ToString());
employee.FullName = row["FullName"].ToString();
employees.Add(employee);
}
ListEmployee.DataContext = employees;
以这种方式,SelectedItem
将是员工对象。
如果您发现自己经常这样做,我建议使用实体框架处理所有乏味的数据库内容。