【发布时间】:2009-05-10 06:08:20
【问题描述】:
我正在编写一个允许用户浏览数据的应用程序,并且我想使用 FireFox UI 样式:允许用户打开任意数量的窗口,每个窗口都包含任意数量的选项卡。我也想尽可能地使用 Model-View-ViewModel 模式来做到这一点。
在 MVVM 中打开一个新标签应该很容易处理。制作 TabViewModel 的 ObservableCollection,将该集合绑定到 TabControl 的 ItemsSource,然后打开一个新选项卡理论上就像向集合中添加一个新的 TabViewModel 一样简单。
这是我感兴趣的问题:有没有办法做同样的事情来打开一个新的窗口?即,将 WindowViewModel 的 ObservableCollection 数据绑定到...应用程序的 Windows 集合的 ItemsSource?...这样当我将新的 WindowViewModel 添加到可观察集合时,会自动打开一个新窗口?然后将其绑定到应用启动中,这样我就无需设置 StartupUri,而是将第一个 WindowViewModel 添加到集合中?
由于我实际上无法对 Application.Windows 进行数据绑定,因此 ViewModel 层的最佳方式是:
- 添加新的 WindowViewModel 并自动出现新的 Window;
- 移除 WindowViewModel 并使其窗口自动关闭。
- 如果用户关闭窗口,则从集合中删除 WindowViewModel。
我可以编写自己的对象来监视 INotifyCollectionChanged 并打开/关闭窗口以响应收集事件,但我不确定这是否是最好的方法 - 如果是,我不确定最好的方法将其挂接到应用程序的方法。有人对解决此问题的最佳方法有想法吗?
【问题讨论】:
标签: wpf data-binding mvvm