gpt4 book ai didi

wpf - 什么构成 View 模型?

转载 作者:行者123 更新时间:2023-12-03 10:59:44 24 4
gpt4 key购买 nike

我仍然不完全确定什么构成了 View 模型。我有一个类用于包装我的模型并稍微更改数据,但我不确定它是否构成 View 模型。什么是必要的 View 模型?它是否只是不应该直接依赖于 View ,以便 View 模型不知道 View 如何使用其属性并且 View 不知道 View 模型中的内容?当 View 想要更新任何东西时,它只是给出了一些抽象命令, View 模型采用并用于更新模型?

正如我在 MVVM 中所理解的那样,我应该在 View 上使用绑定(bind)到 View 模型上的属性的属性,这些属性绑定(bind)到模型上的属性。

而在相反的方向,我应该使用从 View 到 View 模型的命令,然后它可以使用 Icommand 来命令模型,或者可以只调用模型中的公共(public)函数来对其进行更改。

一件令人困惑的事情是,在我看到的 MVVM 示例中,看起来就像在 MVVM 中一样,除了可能创建命令之外, View 应该没有任何代码,但我不知道如何在我当前的项目中做到这一点。我正在使用许多与事件交互的控件来制作自定义控件。

我如何在不使用事件的情况下让一个 TreeView 在另一个 TreeView 的展开上展开?

最佳答案

通常, View 模型最终与您的领域模型非常相似。拥有 View 模型的主要目标之一是将 GUI 开发与业务逻辑分开。例如,假设您有一个“用户”域模型,该模型具有您不希望向 View 公开的 IsAdmin 属性。您创建了一个名为“UserViewModel”的 View 模型,它仍然具有 ID、用户名和密码(参见下面的示例代码),但没有 IsAdmin 属性。另一种方法是在 View 模型中使用域模型,请参阅下面的“AlternateUserViewModel”类。任何 View Model 解决方案都有利有弊。创建具有属性的 UserViewModel 类意味着您实际上是在复制为域模型创建的对象,因为通常您的域模型与您的 View 模型非常相似。使用 AlternateUserViewModel 方法,业务逻辑层和 GUI 层之间没有明确的分离,因为 View 模型仍然需要“了解”域模型。您决定采用哪种方法实际上取决于您工作的环境。对于个人项目,我喜欢使用第二种方法,因为将业务逻辑与设计层分离并不是我不想让的主要问题 View 模型层“看到”领域模型层,但对于在设计层和后端有独立团队工作的大公司,第一种方法可能是首选。

public class User
{
public int ID { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public bool IsAdmin { get; set; }
}

public class UserViewModel
{
public int ID { get; set; }
public string Username { get; set; }
public string Password { get; set; }
}

public class AlternateUserViewModel
{
public User User { get; set; }

public User ToDomainModel()
{
if (User == null)
return null;

// if this is an existing user, retrieve it from the database so you're not overwriting the IsAdmin property
if (User.ID != default(int))
{
User existingUser = UserService.GetUserByID(User.ID);
existingUser.Username = User.Username;
existingUser.Password = User.Password;
// IsAdmin is not set because you don't want that property exposed in the View Model
return existingUser;
}
else
{
return new User
{
Username = User.Username,
Password = User.Password,
IsAdmin = false
};
}
}
}

关于wpf - 什么构成 View 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18668497/

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