我在 WPF 中有一个 TreeView 控件,它在第一级显示任务列表。每个任务都有一个人员列表。任务和人员都存储在数据库中。我写了 2 个封装了 Linq2Sql 类的视图模型类。TreeView 由 2 个分层 DataTemplates 组成,它们引用 viewmodel 类。显示数据效果很好,我可以毫无问题地添加任务和人员。
但是现在我有一个问题,我想从上下文菜单中删除任务下的一个人。我的问题是我无法访问父任务,因此无法更新 people 集合。我知道要删除哪个人,但不知道它属于哪个任务。
实现这一目标的最佳方法是什么?
谢谢!
格里特
using System;
class ViewmodelPerson
{
public ViewmodelPerson(LinqPerson P)
{
DBPerson = P;
}
LinqPerson DBPerson;
}
public class ViewmodelTask
{
public ViewmodelTask(LinqTask DBTask)
{
this.DBTask = DBTask;
_Persons = from P in DBTask.Person
select new ViewModelPerson(P);
}
LinqTask DBTask;
List<ViewmodelPerson> _Persons;
List<ViewmodelPerson> Persons
{
get
{
return _Persons;
}
}
public void AddPerson(ViewmodelPerson P)
{
}
}
class BaseViewModel
{
public List<ViewmodelTask> Tasks
{
get
{
// Code to get the tasks from Database via Linq
}
}
}
解决方案 因为我无法获得该人所属的父任务,所以我只是将成员 ParentTask 添加到我的人员类中。该成员需要在构造函数中传递。当在 ViewmodelPerson 类上调用 DeletePerson 方法时,对象在数据库中被删除,我可以访问父任务对象并且也可以清理列表。之后调用 IPropertyChanged 的 ChangedProperty("Persons") 并且 WPF 像魔术一样整理 UI!
我只是想知道如果有很多人和任务,这种方法是否对内存消耗有很大影响。