我在WPF应用程序上工作,我有一个数据网格,我用一个从我的数据库返回List的方法填充数据。我已经读过如果你想在运行时动态更新你的数据网格,你必须创建一个viewmodel并在每个模型上实现INotifyPropertyChanged接口,然后在我的对象的每个属性上调用PropertyChanged事件。
但是,我想知道是否有更简单的方法可以做到这一点,因为我已经在我的架构中的不同层中拥有了所有模型,这些模型完全独立于我的WPF应用程序。
我的问题是,当我添加,删除,或更新时,我该怎么做才能确保我的数据网格得到更新数据库直接,没有与我的WPF交互,但仍然能够在程序运行时看到这些更改?
我很感激这里的一些帮助,因为我不是专家,但渴望学习。
下面你可以看到我从我的列表中填充我的数据网格,并在我的构造函数中调用它。
// userClient.GetAllUsers() returns all users from the database
// Constructor, casting list from DB (Generics.List) to
// Observablelist so that it can be updated dynamically I guess?
public Default()
{
userList = new ObservableCollection<UserReference.User>(userClient.GetAllUsers());
InitializeComponent();
LoadUserData();
}
// Filling my datagrid from my observablelist
private void LoadUserData()
{
try
{
userDatagrid.ItemsSource = userList;
}
catch (Exception)
{
MessageBox.Show("Data couldnt be loaded", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
throw;
}
}
为了说明我想要进一步实现的目标,这个remove方法(和click事件)可能会提供一些见解,我必须在datagrid项上调用refresh()方法,这是我想要避免的。
private void removeUserButton_Click(object sender, RoutedEventArgs e)
{
RemoveUser();
userDatagrid.Items.Refresh();
}
private void RemoveUser()
{
UserReference.User user = (UserReference.User)userDatagrid.SelectedItem;
var selectedRow = userDatagrid.SelectedIndex;
if (user != null)
{
try
{
userList.RemoveAt(selectedRow);
userClient.RemoveUser(user.id);
}
catch (Exception)
{
throw;
}
}
}