Wpf MVVM:如何从模型对象创建ViewModel
我想获取模型的值并创建一个viewmode 在我的模型中,我有Wpf MVVM:如何从模型对象创建ViewModel,wpf,mvvm,Wpf,Mvvm,我想获取模型的值并创建一个viewmode 在我的模型中,我有 public class TestElement { public TestElement CurrentNode { get; set; } public TestElement Parent { get; set; } } 我有一些方法可以做到这一点 if (thisNode == null) { thisNode = ne
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
};
}
}
public IEnumerable ToTreeViewModel(IEnumerable treemodel)
{
foreach(树模型中的TestElementitem)
收益-收益-新TesterEntViewModel
{
Id=项目Id,
名称=项。名称,
Children=ToTreeViewModel(item.Children).ToList(),
父项=项。父项
};
}
}
我怎样才能做到这一点呢?我猜你的施法失误发生在生产线上
Parent = item.Parent
TestElementViewModel中的父属性不是TestElement类型,因此您不能这样做
请尝试分配一个新的TestElementViewModel
Parent = new TestElementViewModel { Id = item.Parent.Id, Name = item.Parent.Name, ... }
您可能需要考虑的一个改进是在VIEW模型类中使用包装器,这将使分配属性变得更容易。
比如说,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
}
使您不必在每次实例化新的viewmodel时手动分配属性。我猜您的强制转换错误发生在
Parent = item.Parent
TestElementViewModel中的父属性不是TestElement类型,因此您不能这样做
请尝试分配一个新的TestElementViewModel
Parent = new TestElementViewModel { Id = item.Parent.Id, Name = item.Parent.Name, ... }
您可能需要考虑的一个改进是在VIEW模型类中使用包装器,这将使分配属性变得更容易。
比如说,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
}
使您无需在每次实例化新的viewmodel时手动分配属性。视图模型将引用您的模型。在我的ToTreeViewModel方法中,当我试图从列表中获取它时,我得到了一个强制转换错误..我用这个方法更新了我的原始帖子显示了ToTreeViewModel方法Public IEnumerable ToTreeViewModel(IEnumerable treemodel){foreach(treemodel中的TestElementitem)yield return new TestElementViewModel{Id=item.Id,Name=item.Name,Children=ToTreeViewModel(item.Children.ToList(),Parent=item.Parent};}}您的TestElement类没有Children属性,或者您出于某种原因遗漏了该属性。请向我们显示该属性。您的视图模型将引用您的模型。在我的ToTreeViewModel方法中,当我试图从列表中获取它时,我得到了一个强制转换错误..我用这个方法更新了我的原始帖子显示了ToTreeViewModel方法Public IEnumerable ToTreeViewModel(IEnumerable treemodel){foreach(treemodel中的TestElementitem)yield return new TestElementViewModel{Id=item.Id,Name=item.Name,Children=ToTreeViewModel(item.Children.ToList(),Parent=item.Parent};}}您的TestElement类没有Children属性,或者您出于某种原因遗漏了该属性。请给我们看看那栋房子。谢谢。这很有帮助。谢谢。这很有帮助。