1

我想获取模型的值并创建视图模式

在我的模型中,我有

   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 Parent 并获取我的模型 Parent 值

     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
                };
      }

         }

我怎样才能做到这一点?

4

1 回答 1

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
}

这样您就不必在每次实例化新视图模型时手动分配属性。

于 2013-06-12T23:25:49.143 回答