WPF MVVM模式中的DataGrid绑定问题!

UWPCoder 2019-05-05 08:09:45
1,问题:
在ViewModel中通过重新从数据库获取集合赋值到ViewModel集合 前台不更新!!!!!
-->一个window:含有一个DataGrid,DataContex已经绑定好对应的ViewModel
-->另一个window:输入一个员工的信息添加到数据库
-->一个Model:员工各种属性
-->一个ViewModel:含有一个Model的集合,类型为Observerbal<>,以MVVM属性方式定义,已经继承ViewModelBase
2,部分代码:


(viewmodel)

public class EmployeeManageViewModel:ViewModelBase
{
private ObservableCollection<Employee> employeeModelList;
public ObservableCollection<Employee> EmployeeModelList
{
get { return employeeModelList; }
set
{
employeeModelList = value;
RaisePropertyChanged("EmployeeModelList");
}
}
public EmployeeBLL employeeBLL = new EmployeeBLL();//获取员工列表BLL(从数据库)
public EmployeeManageViewModel()
{
MsgHelper.RefreshDataGridEvent += MsgHelper_RefreshDataGridEvent;//更新list事件
if (IsInDesignMode)
{

}
else
{
employeeModelList = employeeBLL.GetEmployees();//从数据库获取集合
}
}

private void MsgHelper_RefreshDataGridEvent()
{
employeeModelList = employeeBLL.GetEmployees();//从数据库 再 获取一次赋值给集合
}
}



另一个窗口添加一个员工(部分代码)

employeeBLL.InsertEmployee(employeeInfo.employeeModel);//插入数据库
MsgHelper.RefreshDataGrid();//委托更新list



委托传递类

public delegate void ShowMainMenuHandle();
public delegate void RefreshDataGridHandle();
public static class MsgHelper
{
public static event RefreshDataGridHandle RefreshDataGridEvent;
public static void RefreshDataGrid()
{
RefreshDataGridEvent();
}
}



过程描述:
输入一个员工信息
点击保存
更新数据库
委托更新另一个窗口的ViewModel(那个集合)
可是,发现并不能更新............并且employeeModelList.Add(new Employee{XXXXXX})可以加一个数据并更新,重新赋值不能更新!!
求解答
...全文
455 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
OrdinaryCoder 2019-05-06
  • 打赏
  • 举报
回复
引用 4 楼 UWPCoder 的回复:
[quote=引用 2 楼 OrdinaryCoder 的回复:]
更新集合的时候用属性去更新 不要用字段,也就是用大写的EmployeeModelList

卧槽!哥 我没注意到!!!
已经解决了
感谢[/quote]
解决了就好
UWPCoder 2019-05-06
  • 打赏
  • 举报
回复
引用 2 楼 OrdinaryCoder 的回复:
更新集合的时候用属性去更新 不要用字段,也就是用大写的EmployeeModelList

卧槽!哥 我没注意到!!!
已经解决了
感谢
  • 打赏
  • 举报
回复
输入一个员工信息 点击保存 更新数据库 委托更新另一个窗口的ViewModel(那个集合) -》多个窗口绑定到同一个ViewModel即可,在ViewModel中定义要操作得对象以及集合,对象实现INotifyPropertyChanged接口。 不论是新增还是修改,都使用定义得对象,而不要使用
new Employee{XXXXXX})
,这样可以保证操作的是同一个对象。
OrdinaryCoder 2019-05-06
  • 打赏
  • 举报
回复
更新集合的时候用属性去更新 不要用字段,也就是用大写的EmployeeModelList
  • 打赏
  • 举报
回复
要实现数据源发生变化,界面也自动更新,那么数据源必须是依赖属性。我们平常ViewModel里面的依赖属性由mvvmlight框架封装过,会自动通知界面更新。但是我们自定义的对象不会,也就是说你的Employee类要实现INotifyPropertyChanged接口,也就是你人为的,在属性发生变化是,通知界面更新。
不妨试一下:
public class Employee :  INotifyPropertyChanged
{
private string _name = "";
public string Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged("Name");
}
}

public event PropertyChangedEventHandler PropertyChanged;

void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}

8,833

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧