请耐心等待,因为我是 WPF/XAML 的新手。我正在尝试编写一个 MainWindow.xaml / App.xaml 对,以正确隔离样式化和数据绑定,尽可能接近模型-视图-控制器。至今:
- 我有一个包含所有格式(字体、边距等)的 styles.xaml。它是从 app.xaml 的 Application.Resources 引用的,因此它可以应用于项目中的所有 WPF 表单。
- 模型数据集合作为 App 的成员变量存在,App 通过 GetX() 访问器函数公开它们。
mainwindow.xaml 包含视图结构以及绑定信息。这样做是这样的:
ObjectDataProvider x:Key="AppX" MethodName="GetX" ObjectInstance="{x:Static local:App.Current}"
mainwindow.xaml 包含绑定信息的事实是不好的,因为这应该是控制器(应用程序)的角色。不幸的是,我发现 WPF 设计器的限制之一是您不能(例如)拥有两个未键入的资源引用(一个用于视图样式,一个用于数据绑定样式)。同样,app.xaml 不能在其 Resources 部分中同时包含 styles.xaml 引用和一组数据绑定样式。
理论上,我可以从应用程序的启动处理程序手动实例化主窗口,然后在代码中进行绑定,但这会以两种方式违反 WPF 的精神——应用程序不需要创建窗口,就像在背景; 并且尽可能在 XAML 中比在代码中更好地完成绑定。如果有一种方法可以通知应用程序已创建主窗口以便它可以进行绑定,那还不错,但我没有看到任何(缺少主窗口之后调用应用程序加载,但这不应该是视图的责任)。
所以我有点走投无路。我不知道一种在仍然以“WPF 方式”做事的同时正确遵守 MVC 的方法 - 似乎默认值是 VS 设计器创建一个整体窗口 XAML,它具有混杂的视图、视图样式和控制器。任何关于如何更好地做到这一点的描述或关于该主题的优秀网站的链接将不胜感激。