【问题标题】:How to bind selected item of Listview of unknown class to property如何将未知类的Listview的选定项绑定到属性
【发布时间】:2019-07-30 07:47:52
【问题描述】:

我有一个与访问数据库文件绑定的 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,我找不到方法如何创建与列表中相同类型的类

所以我的问题是如何绑定选定项但不知道组成选定项的类。任何想法都会有所帮助

【问题讨论】:

  • ListView(或其父元素之一)的 DataContext 应设置为所谓的视图模型对象,它是具有(至少)两个属性的类的实例,一个包含所有员工列表的集合类型属性,以及所选员工的一个属性。您可以在网上搜索“MVVM”。

标签: c# wpf listview ms-access data-binding


【解决方案1】:

我认为Adapter.Fill 正在创建一个Dataset,其中包含表格和DataRows。所以 selectedItem 将是一个 DataRow。

我要做的是从您的数据集中创建一个 Employee 对象列表,并绑定到该列表:

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 将是一个员工对象。

如果您发现自己经常这样做,我建议您使用 Entity Framework 来处理所有繁琐的数据库内容。

【讨论】:

  • 当您将 DataContext 设置为 List&lt;Employee&gt; 时,ItemsSource 绑定将为 {Binding},但无法同时绑定 SelectedItem。你实际上需要一个视图模型类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 2018-10-24
相关资源
最近更新 更多