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 属性到一个模型对象,所以我需要知道 :
- 当我将 UI 属性绑定到对象
_User
属性时,我是否尊重 MVVM 架构?
- 当我将列表视图数据源绑定到
liste
时,我是否尊重 MVVM 架构?
- 第一个问题,如果不适合MVVM,是不是暴露模型的属性,而不是声明class?
- 对于第二个问题,如果它不适合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 以便视图收到视图模型已更改的通知。
我有一个带有 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 属性到一个模型对象,所以我需要知道 :
- 当我将 UI 属性绑定到对象
_User
属性时,我是否尊重 MVVM 架构? - 当我将列表视图数据源绑定到
liste
时,我是否尊重 MVVM 架构? - 第一个问题,如果不适合MVVM,是不是暴露模型的属性,而不是声明class?
- 对于第二个问题,如果它不适合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 以便视图收到视图模型已更改的通知。