WPF从文件列表转换为自定义对象 - 在Model或Viewmodel中?

时间:2017-06-24 18:09:16

标签: c# wpf mvvm

我有一个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模式。我是否认为从List到ObservableCollection的转换应该在ViewModel中进行?模型是否应该知道DirectoryItem类?

作为旁注,我不相信传入文件路径列表然后从该列表重建文件夹结构是构建我的ObservableCollection的好方法。我愿意接受有关更好方法的建议!

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

在这种情况下,您的模型实际上是什么有点不清楚,但由于您只是根据磁盘上文件夹的结构创建DirectoryItem个对象,您可以做所有这些,即直接在视图模型类中构建ObservableCollection<DirectoryItem>

因此,您可以使用根目录的路径(string)注入视图模型类,并直接在视图的构造函数中创建您在视图中绑定的ObservableCollection<DirectoryItem>模型。

似乎没有必要首先构建List<string>,然后根据此列表构建ObservableCollection<DirectoryItem>,而不是立即构建ObservableCollection<DirectoryItem>

在视图模型中实现基于文件路径创建分层集合的方法非常好。不要过于复杂化:)