gpt4 book ai didi

WPF ViewModel 与否 ViewModel

转载 作者:行者123 更新时间:2023-12-03 10:58:43 27 4
gpt4 key购买 nike

我的业务模型(实际上它用于使用 Entity Framework 6 读取数据)看起来像:

class Profile : NameDescriptionBase
{
public virtual float Rate {get;set;}
public virtual float HoursPerWeek {get;set;}

public virtual IList<Task> Tasks {get;set;}
}

class Task : NameDescriptionBase
{
public enum TastStates
{
New, Finished, Stopped, InProgress
}

public virtual IList<Task> Tasks {get;set;}
public virtual TastState {get;set;}
public virtual IList<TimeSpan> LoggedPeriods {get;set}
}

我想将此模型绑定(bind)到 TreeView它工作正常(通过 HierarchicalDataTemplate )。但我想自定义每个树叶以将每个任务当前状态指示为组合框,以便用户能够更改它。在这里我卡住了。

我可以在数据上下文中实现服务方法,它提供与 Tuple<int, string> 的绑定(bind)TaskState 值和 id,但我想将它绑定(bind)到每个任务。我的主视图模型(即 DataContext)看起来像:
class MasterViewModel
{
public List<Profile> Profiles {get;set;}
public Profile CurrentProfile {get;set}

public List<Task> ActiveTasks {get;}
public List<Tasl> FinishedTasks {get;}

....
}

因此,当前用户配置文件和相应任务列表更新正常,但看起来绑定(bind)到实体本身的属性不起作用。据我了解,这是预期的 - 我的实体没有实现 INotifyPropertyChanged,因为它不是 View 模型。

那么,对于我的案例来说,只有一种方法可以将每个任务转换为相应的 View 模型并在每个操作之后将其具有更新字段的实体保存到数据库中,这对吗?看起来很丑。

最佳答案

MVVM 模式的目的是首先提供 View -模型分离。由于您的 View 是与模型分开的概念,因此在 View 中定义一个附加类(所谓的 View 模型)来表示您的实体是非常好的。即使在每次更新时,您的 TaskViewModel 都会更新 TaskEntity - 在您调用 SaveChanges() 之前,不会将任何内容保存到 db。

关于WPF ViewModel 与否 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28529819/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com