如何计算实体中的元素并使用RIA Services将其发送到ViewModel?

时间:2011-03-03 12:11:00

标签: silverlight mvvm viewmodel domainservices

大家好! 这是我的问题:如何检索员工数量? 在DomainService中我有:

public IQueryable<employee> GetEmployeesCommon()
{
    return this.ObjectContext. employees
        .Where(t => t. is_record_delete == false)
       ;
}

public int GetNumberOfAllEmployees()
{
    return GetEmployeesCommon()
        .Where(t => t.idtypepc >= 2)
        .Where(t => t.idtypepc <= 11)
        .Count();
}

在DataService中:

public void GetEmployeesAllEmployees(Action<InvokeOperation<int>> getEmployeesCallback)
{
    Context.GetNumberOfAllEmployees(getEmployeesCallback, null);
}

在ViewModel中:

public void GetTechusAllPCs()
{
    EmployeeDataService.GetEmployeesAllEmployees(getEmployeesCallback);
}

private void getEmployeesCallback(InvokeOperation<int> op)
{
        EmpAll = op.Value;
}

private int _empAll;
public int EmpAll
{
    get { return _empAll; }
    set
    {
        _empAll = value;
        RaisePropertyChanged("EmpAll");
    }
}

我在LoadData()中调用了GetTechusAllPCs()(在检索完所有实体之后),然后EmpAll具有正确的值,但是如果更改了Employees的数量(添加或删除一个),EmpAll将具有与以前相同的值。我如何获得实际数据?

有人可以说出了什么问题吗?

1 个答案:

答案 0 :(得分:0)

也许我错过了什么。

我假设你把员工名单放在某个地方?或者您如何添加或删除员工?

为什么EmpAll不是始终返回集合计数的只读属性。 然后,或者采取简单的方法,当你添加或删除一个雇员时,调用RaisePropertyChanged(“EmpAll”);一旦你知道提交通过了。

或者“更好”的方法是在集合的itemadded事件中添加处理程序,在该处理程序中,只需要一行RaisePropertyChanged(“EmpAll”);

如果它是一个可观察的集合,那么该事件将被收集更改。

如果您想知道是否有任何用户添加或删除了员工,您将不得不在计时器上轮询服务器或使用双工服务。