战略,州,单身......或其组成?

时间:2012-03-30 14:31:25

标签: c# wpf singleton state strategy-pattern

我是stackoverflow的新手,对WPF来说相对较新。

我已经围绕着六种重要的模式和最佳实践(以及此处的大量帖子),但似乎无法找到我正在寻找的解决方案。

我的问题:WPF / .Net 4 / C# 我有一个文本处理器(类型编辑器E ),可以一次加载一个文档(类型文档D )(标记为 Editor.CurrentDocument )。多个UI控件绑定到文档的属性(所有依赖项属性),例如 Document.Title Document.DateLastModification

现在我希望能够切换实际的Document实例,而无需取消钩子并重新挂钩所有事件处理程序。所以我想在切换它的实现时,Editor.CurrentDocument属性必须以某种方式保持其实例。

我尝试创建一个 SingleInstanceDocument 类,该类直接从Document继承并使用Singleton模式。但是后来我找不到将任何Document实例注入SingleInstanceDocument的方法,而不必在内部重新映射所有属性。

我在某种程度上被误导或错过了这里的观点吗?如果SingleInstanceDocument方法是一个可行的解决方案,有什么方法可以使用反射将所有可用的依赖项属性从内部Document重新映射到外部的SingleInstanceDocument shell?

非常感谢!

附录

事实证明,通过在CurrentDocument主机对象上实现 INotifyPropertyChanged ,WPF / .NET已经提供了此处所需的功能。因此,更改当前文档会导致UI适当地更新其绑定控件。我很抱歉所有的困惑。

1 个答案:

答案 0 :(得分:0)

首先,学习一些基本的MVVM模式。基本上在WPF-MVVM中只使用ObservableCollection和INotifyPropertyChanged interface

此类型的集合实现了观察者模式,当您添加/删除或“选择”当前项目时,该模式会通知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>