将List <Model>转换为ObservableCollection <ViewModel> - c#

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

参考方案

您可能正在寻找以下内容:

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

您会注意到,很多都是样板代码。但是,如果采用这种方式,则模型/视图模型将完全分离,这将为您省去很多麻烦。

合并List <T>和List <Optional <T >> - java

鉴于: List<Integer> integers = new ArrayList<>(Arrays.asList( 10, 12 )); List<Optional<Integer>> optionalIntegers = Arrays.asList( Optional.of(5), Optional.em…

Python numpy数据指针地址无需更改即可更改 - python

编辑经过一些摆弄之后,到目前为止,我已经隔离了以下状态:一维数组在直接输入变量时提供两个不同的地址,而在使用print()时仅提供一个地址2D数组(或矩阵)在直接输入变量时提供三个不同的地址,在使用print()时提供两个地址3D数组在直接输入变量时提供两个不同的地址,而在使用print()时仅给出一个(显然与一维数组相同)像这样:>>> …

实例化类型<?>的泛型类 - java

我正在为SCJP / OCPJP学习,并且遇到了一个对我来说很奇怪的示例问题。该示例代码实例化了两个通用集合:List<?> list = new ArrayList<?>(); List<? extends Object> list2 = new ArrayList<? extends Object>(); …

根据激活的Maven配置文件更新战争名称 - java

在pom中,我有两个配置文件。测试1测试2现在,我希望根据激活的配置文件更改战争名称。预期结果激活test1配置文件后,战争名称应为prefix-test1.war。激活test1和test2时,战争名称应为prefix-test1-test2.war。如果没有激活任何配置文件,则战争名称应为prefix.war。我的POM文件....<?xml ve…

无法在Maven surefire中运行多个执行? - java

我想运行名称以ResourceTest.java结尾的测试类,因此我在执行后定义了它们。<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <co…