gpt4 book ai didi

wpf - MVVM:如何从Model对象创建ViewModel

转载 作者:行者123 更新时间:2023-12-03 10:38:05 24 4
gpt4 key购买 nike

我想获取模型的值并创建一个 View 模式

在我的模型中

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

在我的 View 模型中,我想创建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
};
}

}

我该如何实现?

最佳答案

我猜你的类型转换错误发生在线上

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
}

这样做是为了您不必在每次实例化新的 View 模型时都手动分配属性。

关于wpf - MVVM:如何从Model对象创建ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17076856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com