将List <model>转换为ObservableCollection <viewmodel>

时间:2017-09-28 01:43:54

标签: c# wpf mvvm

我对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的原因。不知道如何实现这一目标。任何帮助表示赞赏。

1 个答案:

答案 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(),
        };
    }
}

你会注意到很多是样板代码。但是如果你这样做的话,你的模型/视图模型是完全分开的,这将为你节省很多问题。