在添加,删除,修改

时间:2016-12-01 09:44:08

标签: c# asp.net-mvc wpf wcf datagrid

我在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;
        }
    }
}

0 个答案:

没有答案