我想获取模型的值并创建一个viewmode
在我的模型中我有
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
};
}
}
我怎样才能做到这一点?
答案 0 :(得分: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
}
使得您无需在每次实例化新的视图模型时手动分配属性。