2012-03-30 44 views
1

我是新的在stackoverflow和相對較新的WPF。戰略,國家,單身...或其組成?

我已經圍繞着模式和最佳實踐(以及無數帖子)打了半打重磅題頭,但似乎無法找到我正在尋找的解決方案。

我的問題:WPF/.NET 4/C# 我有一個文本處理器,可在同一時間(strored爲編輯器加載一個文檔(類型文獻d的)(類型編輯器È的)。 CurrentDocument)。幾個UI控件綁定到文檔的屬性(所有依賴屬性),如Document.Title,Document.DateLastModification

現在我希望能夠切換實際的文檔實例,而無需解除鉤住並重新掛接所有事件處理程序。所以我想Editor.CurrentDocument屬性必須以某種方式保持它的實例,同時切換它的實現。

我試圖創建一個SingleInstanceDocument類,它直接從Document繼承並使用Singleton模式。但是後來我無法找到一種方法將任何Document實例注入到SingleInstanceDocument中,而無需在內部重新映射所有屬性。

我是不知何故被誤導或錯過了這裏的觀點?如果SingleInstanceDocument方法是一個可行的解決方案,是否有任何方法可以使用反射來自動將所有可用的依賴項屬性從內部Document重新映射到外部SingleInstanceDocument外殼?

非常感謝!

附錄

原來,這裏所需要的功能是由WPF/.NET通過實施已經提供開箱即用的CurrentDocument主機對象INotifyPropertyChanged的。因此,更改當前文檔會導致UI適當地更新其綁定控件。我很抱歉所有的困惑。

+4

時間做一些遺忘。模式是關於完成事情,而不是服務正確的模式。擁有'SingleInstanceDocument'會有什麼收穫?你不能只實例化一個嗎? – sehe 2012-03-30 14:35:13

+0

事情是我的應用程序使用ORM,以便在編輯器啓動時已加載所有文檔。我只想在任何一個已經加載的實例中切換編輯器中當前編輯的文檔。 – Sebastian 2012-03-30 14:43:03

回答

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; } 

binding selected - current item。

<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>