【问题标题】:Prism v4, MEF WPF DataBinding棱镜 v4,MEF WPF 数据绑定
【发布时间】:2011-02-10 21:34:49
【问题描述】:

首先,关于数据绑定的几个问题:

  • 控件的默认 DataContext 是否设置为代码隐藏?例如,如果我在 test.xaml.cs 中有一个变量 orderNumber,我可以像在 xaml {Binding orderNumber} 中那样引用它吗?
  • 我只能将数据绑定到对象的属性是否正确?

我在一个单独的模块/程序集中有一个 Prism 服务,我通过 MEF 将它导入我的 Shell 应用程序。我正在尝试对其进行数据绑定,但它似乎不起作用。

我的解决方法如下。 在我的 Shell.xaml.cs 中:

[Import(AllowRecomposition = false)]
private IRibbonService _menuService;
public IRibbonService MenuService
{
    get
    {
        return _menuService;
    }
}


public void OnImportsSatisfied()
{
    Debug.WriteLine("Imports satisfied", "Prism");
    this._moduleManager.LoadModuleCompleted += new EventHandler<LoadModuleCompletedEventArgs>(moduleManager_LoadModuleCompleted);

    //TODO figure out how to properly bind to the ribbon
    Ribbon.DataContext = _menuService;
    RibbonAppMenu.DataContext = _menuService.ApplicationMenuData;
}

有没有办法在设置对象之前在 xaml 中设置数据上下文 - 特别是关于 MEF / Prism 场景?在我的功能区对象上,我尝试了DataContext="{Binding MenuService}",但没有奏效。

【问题讨论】:

    标签: c# wpf data-binding prism mef


    【解决方案1】:

    控件的默认 DataContext 是否设置为代码隐藏?例如,如果我在 test.xaml.cs 中有一个变量 orderNumber,我可以像在 xaml {Binding orderNumber} 中那样引用它吗?

    没有。默认情况下,没有 DataContext,它使用 WPF 中的层次结构机制从父级继承。如果您希望控件具有 DataContext,则需要显式设置它。

    我只能对对象的属性进行数据绑定是否正确?

    是的。您只能绑定到属性。如果您希望双向绑定起作用,则该对象还必须是 DependencyObject 或实现 INotifyPropertyChanged

    有没有办法在设置对象之前在 xaml 中设置数据上下文 - 特别是关于 MEF / Prism 场景?在我的功能区对象上,我尝试了 DataContext="{Binding MenuService}" 但没有奏效。

    这将尝试使用层次结构将DataContext 设置为包含DataContext 的MenuService 属性(即:父控件/窗口的DataContext 的MenuService 属性)。您不能绑定到自己来设置 DataContext。

    您可以在 XAML 中创建一个新对象用作 DataContext,或者让包含对象为您提供 DataContext。

    【讨论】:

    • @Chris: MenuService 是在 Ribbon 还是 RibbonWindow 中定义的?
    • IRibbonService 接口和 RibbonService 类在名为 Infrastructure 的单独项目中声明/实例化,并使用 MEF 导出...然后使用上述问题中使用的代码导入 RibbonWindow。
    • 我尝试过类似serialseb.blogspot.com/2007/10/… 的操作,其中根 xaml 元素的 DataContext 为 self 但没有数据绑定,可能是因为我需要一个 DependencyProperty(不确定,我需要阅读什么那是用来)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2012-09-28
    • 2018-11-10
    • 2011-04-02
    相关资源
    最近更新 更多