2012-03-30 8 views
1

私はstackoverflowで新しく、WPFでは比較的新しいです。戦略、状態、シングルトン...またはその構成?

私は半ダースのパターンとベストプラクティスの重い書物(だけでなく、ここでは、多くのポスト)のまわりで私の頭をラップしましたが、私は探しています解決策を見つけるように見えることはできません。

私の問題:WPF /ネット4/C位 私はエディタとしてstrored時間(AT(タイプ文書Dの)一つの文書をロードすることができる(タイプエディタEの)テキストプロセッサを有します。 CurrentDocument)。いくつかのUIコントロールはDocument.Title,Document.DateLastModificationのような文書のプロパティ(すべての依存関係のプロパティ)にバインドします。

今、私はすべてのイベントハンドラを外し、再フックすることなく、実際のドキュメントインスタンスを切り替えることができるようにしたいです。ですから、Editor.CurrentDocumentプロパティは実装を切り替える際に何らかの形でそのインスタンスを保持しなければなりません。

私はSingleInstanceDocumentクラスを作成して、ドキュメントから直接継承し、シングルトンパターンを使用しようとしました。しかし、私はすべてのプロパティを内部的に再マップせずに、SingleInstanceDocumentにDocumentインスタンスを挿入する方法を見つけることができません。

は私が何とか誤っているか、ここでのポイント足りませんか? SingleInstanceDocumentアプローチが実行可能なソリューションである場合、使用可能なすべての依存関係プロパティを内部ドキュメントから外部SingleInstanceDocumentシェルに自動的に再マップする方法はありますか?

ありがとうございました!

補遺

それはここでは、必要な機能が既にを実装することにより、箱から出してWPF/.NETによって提供されたことが判明しCurrentDocumentホストオブジェクトにをINotifyPropertyChangedの。したがって、現在のドキュメントを変更すると、UIがバインドされたコントロールを適切に更新しました。すべての混乱のために申し訳ありません。

+4

時間。パターンは、正しいパターンを提供することではなく、物事を終わらせることに関するものです。 'SingleInstanceDocument'を持つことの利益は何ですか? 1つしかインスタンス化できませんか? – sehe

+0

私のアプリケーションはORMを使用しているため、エディタの起動時にすべてのドキュメントが既に読み込まれています。エディタ内の現在編集されているドキュメントを、すでにロードされているインスタンスのいずれかで切り替えるだけです。 – Sebastian

答えて

0

まず、いくつかの基本的なMVVMパターンを学びます。基本的にWPF-MVVMではObservableCollectionとINotifyPropertyChanged interfaceを使用します。

コレクションのこのタイプは、あなたが追加したときに/削除または現在の項目を「選択」UI(ビュー)に更新を通知オブザーバーパターンを実装します。

//in main ViewModel 
private Ducument _currentDocument; 

public Document CurrentDocument 
{ 
    get { return _currentDocument; } 
    set 
    { 
     _currentDocument = value; 
     NotifyPropertyChanged("CurrentDocument"); 
    } 
} 

//stored all loaded documents as collection. 
public ObservableCollection<Document> Documents { get; set; } 

バインディング - 現在のアイテム。いくつかの忘却を行うには

<ListBox ItemsSource="{Binding Path=Documents}" SelectedItem="{Binding Path=CurrentDocument}" DisplayMemberPath="Title"> 
    <!-- //all Document.Title as listitem --> 
</ListBox> 
<!--// Editor's View --> 
<ContentControl DataContext="{Binding Path=CurrentDocument}"></ContentControl> 
関連する問題