【发布时间】:2011-05-11 22:47:49
【问题描述】:
我们有一个基于松散 Xaml(或托管 Xaml - 从未确定正确的术语!)的 C# 解决方案。但基本上我们获取一个 Xaml 文件并将其加载到 XamlReader 中,然后将该 FrameworkElement 弹出到 UserControl 上。我们需要处理数据绑定的能力,并且我们有一个 ViewModel 来处理这个问题。但是,虽然我可以通过在新创建的 FrameworkElement 上设置它来通过代码注入 DataContext,但如果我想通过 Blend 轻松工作并在您选择“数据绑定...”选项时使用内置的可绑定属性列表我需要在 Xaml 中设置 DataContext(如果没有,Blend 会将其添加到 Xaml)。我宁愿不必这样做,因为正如我所说,我已经通过代码执行此操作。
问题是 - 有没有办法避免这种情况?
我正在考虑通过 app.xaml 以某种方式执行此操作,但问题取决于屏幕,当它显示时它将具有不同的上下文(因此我们动态更改上下文),我很确定你可以'不在多个数据上下文中加载。
也许有更好的方法来拆分它。我们的解决方案如下:-
- 带有 MainWindow.xaml(主应用程序)的 WPF 应用程序
- 主 WPF 应用程序(上图)放置在 MainWindow.xaml 上的单独程序集中的用户控件
- 然后此用户控件绑定到视图模型
- 主应用程序在通过其内置状态机时设置 DataContext。
- 所有松散的 Xaml 文件都保存在主应用程序中。
所以基本上取决于状态机何时显示屏幕,它会有不同的数据上下文。状态机处理推送数据上下文,这些屏幕只有在正确的上下文中使用时才会起作用。所以我们真的不需要(或不想)必须在 Xaml 中设置数据上下文。它由状态机完成。
但我无法在 Tinterweb 上找到关于 Loose Xaml 的太多信息,所以我们正在学习中……
提前致谢!
【问题讨论】:
标签: c# data-binding mvvm expression-blend