如何解决使用MVVM与ObservableCollection的WPF DataGrid绑定
我的MVVM / WPF代码有问题,无论我读了多少篇文章/问题,我都无法解决。
基本上,我正在使用Dapper查询数据库并进行以下设置:
- 客户类是一个实体类,它反映了我的数据库表(目前仅用于测试的名称属性)
- CustomerDataAccess类,该类具有“ GetCustomers”方法,并将其放入ObservableCollection
- AppSession这是我的ViewModel
- 我的XAML
所以我想发生的是,当我单击“单击”按钮时,它将运行xaml.cs以运行AppSessions-CDA.getCustomers()分配给集合,然后将集合绑定到XAML。
不使用按钮,我的数据就没问题,但是当我尝试实现按钮时,它永远不会映射,有人可以帮忙吗?
客户数据访问
public class CustomerDataAccess : BaseNotificationClass
{
public ObservableCollection<Customer> Customers { get; set; }
public ObservableCollection<Customer> GetCustomers()
{
string sql = "SELECT TOP 1 * FROM CUSTOMERS";
Customers = new ObservableCollection<Customer>();
using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(ConnectionHelper.ConnectionStringRetrieve("CSharpTesting")))
{
var output = connection.Query<Customer>(sql).ToList();
Customers = new ObservableCollection<Customer>(output);
return Customers;
}
}
}
AppSession类
public class AppSession : BaseNotificationClass
{
public CustomerDataAccess cda { get; set; }
public ObservableCollection<Customer> customerList { get; set; }
public AppSession()
{
cda = new CustomerDataAccess();
//This brings me the right data back
//cda.Customers = new ObservableCollection<Customer>();
//cda.Customers = cda.GetCustomers();
}
public void ListCustomers()
{
cda.Customers = new ObservableCollection<Customer>();
cda.Customers = cda.GetCustomers();
}
}
MainWindow.xaml.cs
public partial class MainWindow : Window
{
private AppSession _appSession;
public MainWindow()
{
InitializeComponent();
_appSession = new AppSession();
DataContext = _appSession;
}
private void OnClick_GetCustomers(object sender,RoutedEventArgs e)
{
_appSession.ListCustomers();
//This was just me testing it was clicking
searchButton.Content = "Clicked";
}
}
DataGrid绑定
<DataGrid Grid.Column="1" Grid.Row="0"
Height="Auto"
Width="Auto"
AutoGenerateColumns="False"
AlternationCount="3"
AlternatingRowBackground="AliceBlue"
ItemsSource="{Binding cda.Customers}">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Width="*" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Office Phone" Width="*"/>
<DataGridTextColumn Header="Email Address" Width="*"/>
<DataGridTextColumn Header="Post Code" Width="*"/>
</DataGrid.Columns>
</DataGrid>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。