我对stackoverflow还是陌生的,而且对WPF来说还比较陌生。
[我已经将脑袋缠在六个重磅的Patterns和Best Practices(以及此处的许多文章)上,但似乎找不到我想要的解决方案。
我的问题:WPF / .Net 4 / C#我有一个文本处理器(类型为[[Editor E),可以一次加载一个文档(类型为[[Document D)(称为Editor.CurrentDocument)。几个UI控件绑定到Document的属性(所有依赖项属性),例如Document.Title,Document.DateLastModification。
现在,我希望能够切换实际的Document实例,而不必取消挂钩和重新挂钩所有事件处理程序。因此,我猜想Editor.CurrentDocument属性必须以某种方式保留其实例,同时切换其实现。我已经尝试创建一个直接从Document继承并使用Singleton模式的SingleInstanceDocument
类。但是,然后我找不到一种方法,而不必在内部重新映射所有属性,就可以将任何Document实例注入到SingleInstanceDocument中。我是否以某种方式被误导或遗漏了这里的要点?如果SingleInstanceDocument方法是可行的解决方案,我有什么办法可以使用反射将所有可用的依赖项属性从内部Document自动重新映射到外部SingleInstanceDocument shell?]
非常感谢!附录
:事实证明,通过在CurrentDocument宿主对象上实现INotifyPropertyChanged,WPF / .NET已经提供了此处所需的功能。因此,更改当前文档会导致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>