我对MVVM实现很新。这可能听起来像是一个重复的问题,但我找不到什么可以帮助我更好地理解我的基本知识。我有一个Model
类,其成员如下所示:
public class Model
{
public string Name { get; set; }
public int Age { get; set; }
public List<Model> Children { get; set; }
}
我已将此模型类包装在视图模型中,但使用ObservableCollection
代替List
。
public class ViewModel
{
private Model model;
public ViewModel()
{
model = new Model();
}
//getters and setters for both Name and Age
public ObservableCollection<ViewModel> Children
{
//how to convert List<Model> to ObservableCollection<ViewModel> here?
}
}
我绝对不希望将Model
类暴露给视图,这就是我需要创建VM类ObservableCollection
的原因。不知道如何实现这一目标。任何帮助表示赞赏。
答案 0 :(得分:5)
您可能正在寻找以下内容:
public class Model
{
public string Name { get; set; }
public int Age { get; set; }
public List<Model> Children { get; set; }
}
public class ViewModel
{
public ViewModel(Model m)
{
Name = m.Name;
Age = m.Age;
Children = new ObservableCollection<ViewModel>(m.Children.Select(md=>new ViewModel(md)));
}
public string Name { get; set; }
public int Age { get; set; }
public ObservableCollection<ViewModel> Children { get; set; }
public Model GetModel()
{
return new Model()
{
Age = Age,
Name = Name,
Children = Children.Select(vm=>vm.GetModel()).ToList(),
};
}
}
你会注意到很多是样板代码。但是如果你这样做的话,你的模型/视图模型是完全分开的,这将为你节省很多问题。