策略,状态,单例……或其组成?

问题描述 投票:1回答:1

我对stackoverflow还是陌生的,而且对WPF来说还比较陌生。

[我已经将脑袋缠在六个重磅的Patterns和Best Practices(以及此处的许多文章)上,但似乎找不到我想要的解决方案。

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

现在,我希望能够切换实际的Document实例,而不必取消挂钩和重新挂钩所有事件处理程序。因此,我猜想Editor.CurrentDocument属性必须以某种方式保留其实例,同时切换其实现。我已经尝试创建一个直接从Document继承并使用Singleton模式的

SingleInstanceDocument

类。但是,然后我找不到一种方法,而不必在内部重新映射所有属性,就可以将任何Document实例注入到SingleInstanceDocument中。

我是否以某种方式被误导或遗漏了这里的要点?如果SingleInstanceDocument方法是可行的解决方案,我有什么办法可以使用反射将所有可用的依赖项属性从内部Document自动重新映射到外部SingleInstanceDocument shell?]

非常感谢!

附录

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

c# wpf singleton strategy-pattern state-pattern
1个回答
0
投票
这种类型的集合实现了观察者模式,当您添加/删除或“选择”当前项目时,该模式将通知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>
© www.soinside.com 2019 - 2024. All rights reserved.