2013-06-12 117 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

謝謝你,這是有幫助的。 –