【问题标题】:Binding DataTable object with ListBox in WPF vs Binding DataTable object with ListBox in Windows Form Application在 WPF 中将 DataTable 对象与 ListBox 绑定与在 Windows 窗体应用程序中将 DataTable 对象与 ListBox 绑定
【发布时间】:2016-04-27 09:44:07
【问题描述】:

我在 youtube 教程之后在 Windows 窗体应用程序中学到了这一点,但我很难在 WPF 中实现相同的方法。

private void PopulateNames()
{
    using (connection = new SqlConnection(connection_string))
    using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM namesTable", connection))
    {
        DataTable namesTable = new DataTable();
        adapter.Fill(namesTable);
        Debug.Write(namesTable.AsDataView());

        namesListBox.DisplayMemberPath = "name";
        namesListBox.SelectedValuePath = "Id";
        namesListBox.ItemsSource = namesTable.AsDataView();
    }
}

ListView 的 XAML 是

<Grid>
    <ListBox ItemsSource="{Binding}" DisplayMemberPath="name" x:Name="namesListBox" 
             HorizontalAlignment="Left" Height="209" Margin="90,59,0,0" 
             VerticalAlignment="Top" Width="341" SelectionChanged="listBox_SelectionChanged"/>
</Grid>

而且我不明白出了什么问题,我遵循了 MSDN 以及关于 stackoverflow 的许多问题,但由于我是这方面的新手,也许我没有得到我想要的答案。

所以我的问题是 WPF 和 Windows 窗体应用程序中的数据绑定有何不同 认为 WinForms 应用程序中的实现非常简单,我无法弄清楚如何使用 ListBox 填充来自数据库的条目。

【问题讨论】:

  • 如果你调用了PopulateNames 方法,这应该可以工作。你有什么问题?
  • 您是否尝试过从 xaml 中删除 Itemsource DP 并进行检查。 Window DataContext 设置为什么?
  • @user2946329 你拯救了一天,我没有正确调用它

标签: c# wpf xaml datatable listbox


【解决方案1】:

您的代码没有任何问题,它应该可以工作。可能你错过了调用PopulateNames 方法。

此外,您不需要在 XAML 中使用 ItemsSource="{Binding}"DisplayMemberPath="name",因为您已在后面的代码中设置了它。

如果你想在你的 XAML 中这样做,你可以这样做:

private void PopulateNames()
{
    using (connection = new SqlConnection(connection_string))
    using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM namesTable", connection))
    {
        DataTable namesTable = new DataTable();
        adapter.Fill(namesTable);
        Debug.Write(namesTable.AsDataView());
        DataContext = namesTable.AsDataView();
    }
}

在您的 XAML 中:

<ListBox ItemsSource="{Binding}" DisplayMemberPath="name" SelectedValuePath="Id" 
         x:Name="namesListBox" HorizontalAlignment="Left" Height="209" 
         VerticalAlignment="Top" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 2023-03-11
    相关资源
    最近更新 更多