【发布时间】:2011-04-28 15:39:49
【问题描述】:
提前感谢您的指导。我是 MVVM 的新手,我一直在通过文章学习。我想我已经走得很远了,但有一件事似乎让我无法理解。我如何(不使用后面代码中的代码)自动绑定到我想要的视图?据我了解,如果做得正确,这就是模式应该如何工作的。我可以使用主窗口 xaml 中的代码来完成这一切,我什至已经正确创建了一个资源字典(因为我可以在即时窗口中访问它。)我只是无法进入“自动化”的下一步。 '这可能是我的设计,因为我是这种模式的新手,我完全可以接受我做错了这一切的可能性。这就是我所拥有的......
我有一个主窗口。这是一个有 3 行的网格。顶行是一个菜单。最下面一行是状态栏。中间是一个堆栈面板,内容根据菜单选择动态加载。
我有 2 个视图用于填充此堆栈面板。一个只有一个样式化的文本框(Help & About)。另一个本身就是一个复合视图:一个搜索面板、一个结果网格和一个详细面板都加载到一个停靠管理器框架中。
在后面的主窗口代码中,当用户单击菜单选项时,我清除堆栈面板的子项,实例化视图模型,实例化将视图模型传递给其中的视图,然后将新视图添加到子项中的堆栈。这很好用,但我认为它与模式不一致。
正如我提到的,我有资源字典,但我不知道如何将它与堆栈面板相关联。我假设我必须使用绑定,但我不知道如何绑定到资源字典和/或如何告诉它更改命令视图。
我读过的文章已将所有可用的视图模型添加到视图模型中的只读列表中,该列表基本上充当主寡妇和所需的实际视图模型之间的通道。这看起来不错,但我不明白为什么需要资源字典。此外,这些示例是向导实现,在这种情况下,这似乎是一个不错的方法,但我无法想象对于具有 100 个视图模型的应用程序这样做。
再次为我的无知感到抱歉,但我希望有人能指出我正确的方向。正如我所说,我已经阅读了大量文章(Josh Smith、Dave Hill 等),但我仍然没有建立联系,所以我希望得到一些具体的指导。 (我确实有 WPF Unleashed,但我希望在那之前取得一些进展。)
谁能帮忙?
【问题讨论】:
-
没有时间完全回答这个问题,但也许这会让你开始。在资源字典中,您可以为 ViewModel 类型设置默认视图。然后,当您将 ViewModel 的一个实例作为某种 ItemPresenter 的 Content 时,它将使用该默认实例化并神奇地为 ViewModel 显示正确的视图。然后你所要做的就是创建一个带有区域的窗口(或一些类似的,查找它们)并使用区域管理器填充该区域。在这里查看问题stackoverflow.com/questions/5767759/…
-
我想我明白了,但你能确认一下吗?资源字典只是关联特定视图和视图模型的捷径。但尽管如此,无论以何种方式选择执行此操作,您仍然需要在某处显示“触发此事件时,清除现有内容并添加此新内容”的代码。是这样吗?似乎有更好的方法来处理内容的切换,例如您的区域经理。我认为我在阅读“......没有代码背后......”时感到困惑,我认为这意味着内容切换代码不存在。
标签: wpf mvvm binding view viewmodel