winforms - 通知 ViewModel 在另一个 ViewModel、Devexpress、Winforms 中发生了一些事情
问题描述
我的问题如下:当我在一个 ViewModel 中做某事(在这种情况下是添加新学生)时,我想在另一个 ViewModel 中做某事(在这种情况下调用 RaisePropertyChanged)。
在这种情况下,MainWindowViewModel 的相应视图显示学生列表。然后我打开StudentWindowViewModel对应的view,用来在数据库中添加student。当我添加学生时,我希望它立即反映在我的学生列表中。
这是我的代码,但它不会刷新学生列表。
[POCOViewModel()]
public class MainWindowViewModel
{
// getting list of students
public virtual List<Student> Students { get; set; } = MainWindowMethods.GetStudents();
private readonly StudentWindowViewModel viewModel = new StudentWindowViewModel();
public MainWindowViewModel()
{
viewModel.ItemsChanged += () =>
{
this.RaisePropertyChanged(x => x.Students);
};
}
}
这是 StudentWindowViewModel
public delegate void MyDel();
[POCOViewModel()]
public class StudentWindowViewModel
{
public virtual string StudentCode { get; set; } = "";
public virtual string FirstName { get; set; } = "";
public virtual string LastName { get; set; } = "";
public virtual int Age { get; set; }
public event MyDel ItemsChanged;
//add student in database
public void AddStudent()
{
StudentWindowMethods.AddStudent(new Student
{
StudentCode = StudentCode,
FirstName = FirstName,
LastName = LastName,
Age = Age
});
//this is null, and event isn't invoked
ItemsChanged?.Invoke();
StudentCode = "";
FirstName = "";
LastName = "";
Age = 0;
}
}
解决方案
看来您正在寻找BindingList<T>
.
要将复杂的双向数据绑定到列表控件,如ComboBox
,ListBox
或DataGridView
,您需要使用控件的IBindingList
asDataSource
实现。作为一种选择,您可以依赖BindingList<T>
. 这样,底层数据源中的每个添加/删除都将立即反映在控件 UI 中。
BindingList<T>
实际上,您在事件中添加/删除项目ListChanged
将由列表引发,这会导致数据绑定控件(如DataGridView
重置绑定)并反映 UI 中的更改。
虽然 usingBindingList<T>
允许在添加和删除项目时更新绑定控件,但为了立即反映属性更改,T
应该实现INotifyPropertyChanged
.
推荐阅读
- python - 将嵌套 dict 从 json 转换为数据框,其值为列
- sql-server - 在 SSIS 中合并 2 行 CSV 文件
- csv - 将非常大的 DataFrame 写入文本文件或拆分 DataFrame
- java - 如何使用 Java 中的 stream() 根据索引(位置)过滤列表中的元素?
- android - 当 Room 数据库发生变化时,LiveData 会更新我的 observable
- windows - 使用 Apache24 在 Windows 上配置 phpmyadmin
- c# - dd/MM/yyyy 格式在 ASP.NET Core 中不起作用
- c# - 在服务器端使会话 cookie 无效
- join - 如何将单元格数据包含到文本字符串中?
- python - 在 scipy 中重现 sox 频谱图