我在Windows窗体应用程序中按照youtube教程学到了这一点,但是我很难在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
与数据库中的条目。
答案 0 :(得分: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" />