2017-06-24 8 views
0

私は、ツリービューでユーザーにファイル/フォルダの一覧を表示するWPFアプリケーションを持っていて、アプリケーションのために読み込むものを選択します。 ViewModelには、UIにバインドされDirectoryItemクラス内のフォルダ/ファイルを格納します。私は今、それを処理しています方法は、モデルルートディレクトリに合格し、すべてのファイルと文字列のリストを返します WPFファイルリストからカスタムオブジェクトへの変換 - モデルまたはViewModel?

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には、リストをDirectoryItemsのObservableCollectionに変換するBuildDirectoryItemCollection関数があります。

これは私の最初のWPFアプリケーションですので、MVVMパターンに正しく従っていることを確認します。リストからObservableCollectionへの変換がViewModelで行われるべきであると考えていますか?モデルはDirectoryItemクラスの知識を持っているべきですか?

そして、私は、ファイルパスのリストを渡して、そのリストからフォルダ構造を再構築することが、ObservableCollectionを構築する良い方法であるとは確信していません。私はこれを行うより良い方法についての提案にはオープンです!

お時間をいただきありがとうございます。

+0

ObservableCollection <>はList <>のようにIEnumerableを実装していますか?もしそうなら、それはモデル – Jacek

+0

でそれを使用することはOKです。これがdtoまたはドメインモデルであれば、私は 'INotifyPropertyChanged'を実装しません。 – NtFreX

+0

これを拡張できますか?私はあなたが何を意味するか分からない。ユーザーが別のルートパスを選択してファイルのリストを再構築する必要がある場合は、UIに通知する必要があります – cjw

答えて

1

この場合、モデルが実際にどのようなものかはっきりしませんが、ディスク上のフォルダの構造に基づいてオブジェクトを作成するのはDirectoryItemなので、これをすべて実行することもできます。つまり、ObservableCollection<DirectoryItem>を直接ビューモデルクラス

たとえば、ビューモデルクラスにルートディレクトリ(string)のパスを挿入し、ビューモデルのコンストラクタで直接ビューにバインドするObservableCollection<DirectoryItem>を作成できます。

List<string>を最初に作成してからすぐにObservableCollection<DirectoryItem>を作成する代わりに、このリストに基づいてObservableCollection<DirectoryItem>を作成する必要はありません。

ファイルパスに基づいて階層的なコレクションを作成する方法は、ビューモデルに実装するのが完全です。重複しないでください:)

関連する問題