C# WPF从文件列表转换为自定义对象-在模型或视图模型中?

C# WPF从文件列表转换为自定义对象-在模型或视图模型中?,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一个WPF应用程序,它在树状视图中向用户显示文件/文件夹列表,用户可以选择要为应用程序加载的文件/文件夹。ViewModel将文件夹/文件存储在绑定到UI的DirectoryItem类中: public class DirectoryItem : INotifyPropertyChanged { public String DisplayName { get; set; } public String Fullpath { get; set; } public Obs

我有一个WPF应用程序,它在树状视图中向用户显示文件/文件夹列表,用户可以选择要为应用程序加载的文件/文件夹。ViewModel将文件夹/文件存储在绑定到UI的DirectoryItem类中:

public class DirectoryItem : INotifyPropertyChanged
{
    public String DisplayName { get; set; }
    public String Fullpath { get; set; }
    public ObservableCollection<DirectoryItem> Children { get; set; }
    public event PropertyChangedEventHandler PropertyChanged;
}
我现在处理它的方式是,模型被传递一个根目录,并返回一个包含根目录中/下每个文件的字符串列表。然后,ViewModel有一个BuildDirectoryItemCollection函数,该函数将列表转换为DirectoryItems的ObservableCollection

这是我的第一个WPF应用程序,所以我想确保我正确地遵循MVVM模式。我认为从列表到ObservableCollection的转换应该在ViewModel中进行,对吗?模型甚至应该知道DirectoryItem类吗

另外,我不认为传入文件路径列表,然后从该列表重建文件夹结构是构建ObservableCollection的好方法。我愿意接受关于更好的方法的建议


谢谢您的时间。

在这种情况下,您的模型实际上是什么还不清楚,但由于您只是基于磁盘上文件夹的结构创建DirectoryItem对象,因此您最好直接在view model类中完成所有这一切,即构建ObservableCollection

例如,您可以将根目录的路径作为字符串注入视图模型类,并在视图模型的构造函数中直接在视图中创建绑定到的ObservableCollection

似乎没有必要先构建一个列表,然后基于该列表构建一个ObservableCollection,而不是立即构建ObservableCollection


基于文件路径创建分层集合的方法完全可以在视图模型中实现。不要使事情过于复杂:

ObservableCollection实现了IEnumerable,就像List一样?如果是,则可以在模型中使用它。如果这是dto或域模型,我不会实现INotifyPropertyChanged。您可以在此基础上进行扩展吗?我不知道你的意思。如果用户决定选择一个不同的根路径,我必须再次构建文件列表,我希望用户界面得到通知