【问题标题】:MVVM: How to avoid adding DataContext to Xaml for Blend SupportMVVM:如何避免将 DataContext 添加到 Xaml 以获得混合支持
【发布时间】: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


    【解决方案1】:

    您是否尝试过 d:DataContext={d:DesignInstance ...} ? 它允许您仅在设计时为 Blend 和 VS 定义 DataContext。

    【讨论】:

    • 嗨 Elad - 是的,这很完美 - 完成了工作!谢谢!
    猜你喜欢
    • 2014-04-12
    • 2018-08-06
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    相关资源
    最近更新 更多