UI 和 MVVM 应用程序中的模型问题之间的直接绑定

Direct binding between UI and Model issue within MVVM application

我有一个带有 MVVM.As 的 WPF 应用程序 我明白了,MVVM 的主要目标是在逻辑层和 UI 层之间进行分离。

我有这个型号 class :

public class User
{
public string Login{get;set;}
public string Pwd{get;set;}
public List<User> GetUsers()
                {
               //
                }
}

在我的 ViewModel 中,我实例化了一个 User 对象和一个 User

的 ObservableCollection
  public class UserVM
    {
    public User _User{get;set;}
    public ObservableCollection<User> liste{get; private set;}
    public UserVM()
                    {
                    _User = new User("TODO","PWD2");
                    liste = new ObservableCollection(_User.GetUsers);
                    }
    }

我觉得我直接绑定了一个 UI 属性到一个模型对象,所以我需要知道 :

  1. 当我将 UI 属性绑定到对象 _User 属性时,我是否尊重 MVVM 架构?
  2. 当我将列表视图数据源绑定到 liste 时,我是否尊重 MVVM 架构?
  3. 第一个问题,如果不适合MVVM,是不是暴露模型的属性,而不是声明class?
  4. 对于第二个问题,如果它不适合MVVM,我该如何解决?

谢谢,

看起来您的用户 class 具有树状结构,因为它包含一个用户对象列表,而这些对象本身可能包含一个用户对象列表...

这里的问题是您的视图模型 class 包含用户对象。例如,只有 UserVM 模型会包含一个 ObservableCollection。

一个简单的修复方法是:EDIT user.GetUsers() 不 return a List<UserVM>

public class UserVM
{
    public string Login { get; set; }
    public string Pwd { get; set; }
    public ObservableCollection<UserVM> Users { get; private set; }
    public UserVM(User user)
    {
        Login = user.Login;
        Pwd = user.Pwd;
        Users = new ObservableCollection<UserViewModel>(
            user.GetUsers().Select(subUser => new UserViewModel(subUser)));
    }
}

您可能还想实现 INotifyPropertyChanged 以便视图收到视图模型已更改的通知。