1

私はstackoverflowを初めて使用し、WPFを比較的使用していません。

パターンとベストプラクティスの5ダースの重い本(およびここに多数の投稿)に頭を包みましたが、探している解決策が見つからないようです。

私の問題:WPF / .Net 4 / C#一度に1つのドキュメント(タイプDocument D )をロードできる(タイプEditor Eの)テキストプロセッサがあります(Editor.CurrentDocumentとしてstroed)。いくつかのUIコントロールは、Document.TitleDocument.DateLastModificationなどのドキュメントのプロパティ(すべての依存関係プロパティ)にバインドします。

ここで、すべてのイベントハンドラーをフック解除して再度フックすることなく、実際のDocumentインスタンスを切り替えられるようにしたいと思います。したがって、Editor.CurrentDocumentプロパティは、実装を切り替える間、何らかの形でそのインスタンスのままである必要があると思います。

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

私はどういうわけか間違った方向に進んでいるのでしょうか、それともここでのポイントを見逃しているのでしょうか?SingleInstanceDocumentアプローチが実行可能なソリューションである場合、リフレクションを使用して、使用可能なすべての依存関係プロパティを内部ドキュメントから外部SingleInstanceDocumentシェルに自動的に再マップする方法はありますか?

どうもありがとうございます!

補遺

ここで必要な機能は、CurrentDocumentホストオブジェクトにINotifyPropertyChangedを実装することにより、すぐに使用できるWPF/.NETによって既に提供されていることがわかりました。したがって、現在のドキュメントを変更すると、UIはバインドされたコントロールを適切に更新します。ご迷惑をおかけして申し訳ございません。

4

1 に答える 1

0

まず、いくつかの基本的なMVVMパターンを学びます。基本的にWPF-MVVMでは、ObservableCollectionおよびINotifyPropertyChangedインターフェイスを使用するだけです。

このタイプのコレクションは、現在のアイテムを追加/削除または「選択」したときにUI(View)への更新を通知するオブザーバーパターンを実装します。

//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>
于 2012-04-30T09:11:48.597 に答える