WPF+ListBox数据绑定系统.data.DataRowView

本文关键字:DataRowView data 系统 数据绑定 WPF+ListBox | 更新日期: 2023-09-27 18:00:00

在WPF应用程序中从数据库获取数据后,我正在尝试填充Listbox。

我有一个返回DataTable 的类

class DataBaseTable
{
    MySqlConnection connection;
    MySqlDataAdapter adapter;
    public DataTable GetTable(String query, String sortBy)
    {
        String connString = "server=localhost;uid=root;pwd=MyNewPass123;database=samprojects;";
        connection = new MySqlConnection(connString);
        adapter = new MySqlDataAdapter(query, connection);
        DataTable dataTable = new DataTable();
        adapter.Fill(dataTable);
        dataTable.DefaultView.Sort = sortBy;          
        return dataTable;
    }
}

和XAML代码

<ListBox Name="listbox1" Width="150" Height="150" SelectionMode="Single" ItemsSource="{Binding}" />

主窗口类

public partial class MainWindow : Window
{
    private DataBaseTable dbTable = new DataBaseTable();
    public MainWindow()
    {
        InitializeComponent();
        listbox1.DataContext = dbTable.GetTable("select name from projects", "name");            
    }
}

但我的列表框里已经塞满了

  System.Data.DataRowView
  System.Data.DataRowView
  System.Data.DataRowView

不知道哪里出了问题?

WPF+ListBox数据绑定系统.data.DataRowView

默认情况下,控件将显示。对象的ToString()。由于它是一个datarowview,所以它只显示程序集名称。您想要的是设置DisplayMemberPath

<ListBox Name="listbox1" Width="150" Height="150" SelectionMode="Single" ItemsSource="{Binding}" DisplayMemberPath="MyColumn"/>

试试这个:

<ListBox Name="listbox1" Width="150" Height="150" SelectionMode="Single" ItemsSource="{Binding}" />
  <ListBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding name}" />
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

这里还有更多关于这个主题的信息:

数据模板