从模型添加新项目计数

时间:2013-09-30 10:18:52

标签: c# mvvm

我有一个模型:

  • 公司
      • 人(姓名,国籍,新)
      • 人(姓名,国籍,新)
      • 人(姓名,国籍,新)
      • 人(姓名,国籍,新)
      • 人(姓名,国籍,新)
      • 人(姓名,国籍,新)
      • 人(姓名,国籍,新)
      • 人(姓名,国籍,新)
      • 人(姓名,国籍,新)

该人的“新”财产是一个布尔。如何在我的UI上为公司动态计算每个部门的新员工数量?

我已经在我的MainView的XAML中为每个公司设置了一个TextBox,我希望该文本框告诉我公司(来自所有部门)的新人总数。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

最好的方法是拥有专门的部门视图和视图模型。然后,部门视图模型将公开所有Person个实例以及反映所需值的NewPersonCount属性。

以下是新视图模型的粗略示例(省略INotifyPropertyChanged和所有):

public class DepartmentViewModel
{
  public ObservableCollection<Person> People {get; set; }
  public int NewPeopleCount
  {
    get
    {
      return People.Where(p => p.New).Count();
    }
  }
}

部门视图会绑定到它(例如,NewPeopleCount中显示TextBox)。您的主视图很可能会将ListView或其他ItemsControl绑定到所有部门,并显示部门视图。

答案 1 :(得分:0)

您可以创建所需的数据结构并创建将返回所需值的属性

public class Person
{
    public string Name;
    public string Nationality;
    public bool New;
}

public class Department
{
    public List<Person> EmployeeList;
    public void Add(Person person)
    {
        if (EmployeeList == null)
            EmployeeList = new List<Person>();
        EmployeeList.Add(person);

    }
    public int GetNewPersonCount
    {
        get
        {
            int count = 0;
            if (EmployeeList != null)
            {
                foreach (Person p in EmployeeList)
                {
                    if (p.New)
                        count++;
                }
            }

            return count;
        }
    }
}

public class Company
{
    public List<Department> DepartmentList;
    public void Add(Department department)
    {
        if (DepartmentList == null)
            DepartmentList = new List<Department>();
        DepartmentList.Add(department);


    }
    public int GetNewPersonCount
    {
        get
        {
            int count = 0;
            if (DepartmentList != null)
            {
                foreach (Department d in DepartmentList)
                {
                    count += d.GetNewPersonCount;
                }
            }

            return count;
        }
    }
}