【发布时间】:2019-03-06 11:26:45
【问题描述】:
我对 WPF 很陌生,所以我一直在为一些基本概念而苦苦挣扎。
我的应用程序由一个包含各种选项卡的主窗口组成。第一个选项卡用于添加文件,激活对给定文件进行操作的其他选项卡。为简单起见,我们称后者为“DataTabs”。
我不确定如何在选项卡之间正确通信。目前,FileInputTab 使用指定的 ICommand 执行以下操作:读取数据,为 DataTab 创建视图模型,并使用 FileInputTab 的视图引发“ViewModelReadyEvent”。
然后此事件冒泡到 MainWindow,它激活 DataTab 并将创建的 ViewModel 传递给它们。
现在,有两件事我正在努力解决。
填充视图模型 在其相应视图中填充 DataTab 的视图模型,而不是从实际上与之无关的 FileInputTab 填充视图模型是否更好?这样,我可以正确地在两者之间建立引用,但我必须为每个 DataTab 分别执行填充。有什么想法吗?
“兄弟”视图之间的通信 让事件一直冒泡到 MainWindow 以让它协调所有视图间通信是不对的。我查看了 RoutingStrategies,但找不到任何直接在“兄弟”视图之间进行通信的方法。我想在 FileInputTab 中引发一个事件并直接在 DataTabs 中对其进行操作,而无需任何中间。
WPF 专家的任何想法、cmets 或书籍推荐将不胜感激。提前致谢。
【问题讨论】:
-
你应该使用 mvvm。将视图模型的列表或可观察集合绑定到选项卡控件项源。将它们模板化到选项卡中。如果你想在不同的对象之间进行通信,我推荐 mvvmlightlibs nuget 和 messenger。 social.technet.microsoft.com/wiki/contents/articles/…