C# 如何使用嵌套的ObservaleCollection将数据导入ObservaleCollection?

C# 如何使用嵌套的ObservaleCollection将数据导入ObservaleCollection?,c#,linq,mvvm,windows-phone-7,windows-phone,C#,Linq,Mvvm,Windows Phone 7,Windows Phone,从xml创建ViewModel的最佳方法是什么,如: <Cars> <Car> <Name/> <Model/> <Parts> <Part> <PartName/> <PartType/> </Part> <Part> <PartName/>

从xml创建ViewModel的最佳方法是什么,如:

<Cars>
 <Car>
   <Name/>
   <Model/>
   <Parts>
     <Part>
         <PartName/>
         <PartType/>
     </Part>
     <Part>
         <PartName/>
         <PartType/>
     </Part>
   </Parts>
 </Car>
</Cars>

会是这样吗

public class PartViewModel : INotifyPropertyChanged
{
    private string _PartName;
    private string _PartType;
    //... and proper get/seters for NotifyPropertyChanged
};

public class CarViewModel : INotifyPropertyChanged
{
    private string _Name;
    private string _Model;
    private ObservableCollection<PartViewModel> _parts;
    //... and proper get/seters for NotifyPropertyChanged
};
公共类PartViewModel:INotifyPropertyChanged
{
私有字符串_PartName;
私有字符串_PartType;
//…以及NotifyPropertyChanged的正确get/seter
};
公共类CarViewModel:INotifyPropertyChanged
{
私有字符串\u名称;
私有字符串模型;
私人可观察到的收集部分;
//…以及NotifyPropertyChanged的正确get/seter
};
那么LINQ将如何填充CarViewModel呢

 List<CarViewModel> FeedItems = (from carsXdoc in xdoc.Descendants("Cars")
                                 select new CarViewModel()
                                 {
                                     Name = carsXdoc.Element("Name").Value,
                                     Model = carsXdoc.Element("Model").Value,
// And then ? how do you fill nested observable collection with parts ?
                                 }).ToList();
List FeedItems=(来自xdoc.subjects(“Cars”)中的carsXdoc)
选择新的CarViewModel()
{
Name=carsXdoc.Element(“Name”).Value,
Model=carsXdoc.Element(“Model”).Value,
//然后呢?如何用零件填充嵌套的可观察集合?
}).ToList();

这应该足够直截了当了-只需在select中执行另一个嵌套的LINQ查询-然后就可以使用ObservableCollection构造函数,它接受和IEnumerable


为了保持理智,您可能希望将其分解为一个单独的函数

这应该足够直截了当-只需在select中执行另一个嵌套LINQ查询-然后就可以使用ObservableCollection构造函数,该构造函数接受和IEnumerable


为了保持理智,您可能希望将其分解为一个单独的函数

下面这样的方法应该可以做到:

List<CarViewModel> FeedItems = (from carsXdoc in xdoc.Descendants("Cars")
                                select new CarViewModel()
                                {
                                    Name = carsXdoc.Element("Name").Value,
                                    Model = carsXdoc.Element("Model").Value,
                                    Parts = ToObservableCollection(from part in carsXdoc.Element("Parts").Descendants("Part")
                                                                   select new PartViewModel()
                                                                   {
                                                                       PartName = part.Element("PartName").Value,
                                                                       PartType = part.Element("PartType").Value,
                                                                   })
                                }).ToList();

类似于以下内容的操作应该可以做到这一点:

List<CarViewModel> FeedItems = (from carsXdoc in xdoc.Descendants("Cars")
                                select new CarViewModel()
                                {
                                    Name = carsXdoc.Element("Name").Value,
                                    Model = carsXdoc.Element("Model").Value,
                                    Parts = ToObservableCollection(from part in carsXdoc.Element("Parts").Descendants("Part")
                                                                   select new PartViewModel()
                                                                   {
                                                                       PartName = part.Element("PartName").Value,
                                                                       PartType = part.Element("PartType").Value,
                                                                   })
                                }).ToList();