2013-06-12 81 views
1

我想我的模型的值,并创建一个视图模式MVVM:如何创建模型对象视图模型

在我的模型我有

public class TestElement 
    { 
    public TestElement CurrentNode { get; set; } 
    public TestElement Parent { get; set; } 
    } 

我有一些方法做到这一点

if (thisNode == null) 
      { 
       thisNode = new TestElement { Name = name, Parent = CurrentNode }; 
       currentCollection.Add(thisNode); 
      } 

在我看来模式,我想创建TestElementViewModel父母让我的模型父值

 public class TestElementViewModel 
    { 

    public TestElementViewModel Parent { get; set; } 

我想在这个方法中使用它

 public IEnumerable<TestElementViewModel> ToTreeViewModel(IEnumerable<TestElement> treemodel) 
    { 
     foreach (TestElementitem in treemodel) 
      yield return new TestElementViewModel 
       { 
        Id = item.Id, 
        Name = item.Name, 
        Children = ToTreeViewModel(item.Children).ToList(), 
        Parent = item.Parent 
       }; 
     } 

     } 

我怎样才能做到这一点?

+0

您的视图模型将引用您的模型。只要从中获得价值。 –

+0

在我ToTreeViewModel方法,当我尝试从列表中我得到一个错误铸造更新..我我原来的职位与方法 –

+0

显示我们ToTreeViewModel方法得到它 –

回答

1

我猜你铸造错误发生在行

Parent = item.Parent 

那么你TestElementViewModel Parent属性是不是TestElement类型,所以你不能这样做。

尝试分配新的TestElementViewModel。

Parent = new TestElementViewModel { Id = item.Parent.Id, Name = item.Parent.Name, ... } 

你可能想要考虑的一个改进是在你的ViewModel类中使用包装,这将使分配属性更容易一些。

例如,

public class TestElementViewModel : INotifyPropertyChanged 
{ 
    public TestElementViewModel(TestElement model) 
    { 
     Model = model; 
     if(Model.Parent != null) 
      Parent = new TestElementViewModel(Model.Parent); 
    } 

    public TestElement Model { get; private set; } 

    private TestElementViewModel _parent; 

    public TestElementViewModel Parent 
    { get { return _parent; } 
     set { _parent = value; OnPropertyChanged("Parent"); } 
    } 

    public int Id 
    { 
     get { return Model.Id; } 
     set { Model.Id = value; OnPropertyChanged("Id"); } 
    } 

    // rest of the properties need wrapping too 
} 

使得它,这样你就不必每次实例化一个新的视图模型时手动分配的属性。

+0

谢谢你,这是有帮助的。 –