如何在ViewModel中触发方法?

  • 本文关键字:方法 ViewModel c# wpf mvvm
  • 更新时间 :
  • 英文 :


我正在重构以从我的WPF窗口的代码隐藏中删除逻辑并符合MVVM。我的ViewModel从我的DataService类中调用一个方法,从数据库中获取Employee数据并将其映射到对象上,然后将对象作为illist返回。它还包含一个按DepartmentID筛选列表的方法。

public class EmployeesViewModel : ViewModelBase
{
public IList<EmployeeModel> allEmployees = (IList<EmployeeModel>)EmployeeDataService.GetEmployeeList();
public List<EmployeeModel> employeesByDepartment = new List<EmployeeModel>();
private List<EmployeeModel> getEmployeesByDepartment(List<EmployeeModel> employees, int departmentID)
{
employeesByDepartment = (List<EmployeeModel>)employees.Where(employees => employees.Department.ID == departmentID);
return employeesByDepartment;
}
}

我如何执行这些函数而不使用事件在我的主窗口后面的代码?

您可以尝试将事件从代码隐藏移到ViewModel中的属性。将方法链接到ViewModel的PropertyChanged事件上,使其在数据绑定属性的值发生变化时执行操作,这并不罕见。我经常这样做。

示例:假设您希望按部门显示员工,如果他们切换UI复选框"按部门显示"它被绑定到ViewModel中的bool ShowByDept属性。

public class EmployeesViewModel : ViewModelBase
{
private bool showByDept;
public bool ShowByDept { get => showByDept; set { showByDept = value; OnPropertyChanged(); }
public EmployeesViewModel()
{
PropertyChanged += OnViewModelPropertyChanged;
}
private void OnViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(ShowByDept))
{
// Trigger: If the user toggled on the "Show By Dept" checkbox, then run this method.
if (ShowByDept)
{
// Execute this method
YourMethod();
}
}
}
...
}

相关内容

  • 没有找到相关文章

最新更新