如何将未知类列表视图的选定项目绑定到属性



我有一个带有访问数据库文件的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正在创建一个包含表和DataRowsDataset。因此,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将是员工对象。

如果您发现自己经常这样做,我建议使用实体框架处理所有乏味的数据库内容。

最新更新