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

时间:2015-02-04 12:11:37

标签: c# .net wpf mvvm binding

我有一个带MVVM的WPF应用程序。据我所知,MVVM的主要目标是将逻辑层和UI层分开。

我有这个Model类:

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

在我的ViewModel中,我实现了用户对象和用户

的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. 当我将listview数据源绑定到liste时,我是否尊重MVVM架构?
  3. 对于第一个问题,如果它不适合MVVM,是否更好地公开模型的属性而不是声明类?
  4. 对于第二个问题,如果它不适合MVVM,我该如何解决?
  5. 谢谢,

1 个答案:

答案 0 :(得分:0)

看起来你的User类有一个类似树的结构,它包含一个User对象列表,它本身可能包含一个User对象列表......

这里的问题是您的视图模型类包含User对象。例如,只有UserVM模型包含ObservableCollection。

一个简单的解决方法是:编辑 user.GetUsers()不会返回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,以便视图获得视图模型已更改的通知。